在 shell 脚本中使用 * 变量来引用文件夹中的所有文件

在 shell 脚本中使用 * 变量来引用文件夹中的所有文件

我只是编写了一个要执行的 bash 脚本,并尝试从脚本中 cp 一些文件;例如

cp "myfolder/*.*" "otherfolder"

它抱怨“myfolder/“找不到。然后我尝试更具体一点

cp "myfolder/*.ini" "otherfolder"

仍在抱怨。

然后我尝试了

cp "myfolder/${*}.ini" "otherfolder"

还在抱怨;这一切所做的就是将命令行参数放在带有 .ini 后缀的地方。

cp "myfolder/{*}.ini" "otherfolder"

仍然没有成功。所以刚刚结束时为每个文件输入完整的文件名并且它起作用了。但是有没有办法在 bash 文件中使用星号来引用目录中的所有文件?或者有人能看到我做错了什么吗?

谢谢。

答案1

如果您引用文件名通配模式,则 shell 不会扩展它们(这是您这样做的原因之一)一般来说,想要引用变量扩展,特别是如果它们包含可以解释为通配模式的值)。

代替

cp "myfolder/*.*" "otherfolder"

你应该使用

cp "myfolder"/*.* "otherfolder"

这会将名称中带点的任何内容复制到myfolderotherfolder假设otherfolder是目录的名称)。请注意,默认情况下该*模式与隐藏文件名不匹配,并且大多数 shell 都会保留该模式未展开的如果没有文件名与之匹配。

同样,cp "myfolder/*.ini" "otherfolder"应该写成cp "myfolder"/*.ini "otherfolder".

$* 多变的从通配模式来看,这是另一回事*,两者并没有真正的相关性。该字符串"$*"将是位置变量(“命令行参数”、$1$2$3、 ...)的串联,由 shell 变量的第一个字符IFS(默认情况下为空格)分隔。

相关内容