我只是编写了一个要执行的 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"
这会将名称中带点的任何内容复制到myfolder
(otherfolder
假设otherfolder
是目录的名称)。请注意,默认情况下该*
模式与隐藏文件名不匹配,并且大多数 shell 都会保留该模式未展开的如果没有文件名与之匹配。
同样,cp "myfolder/*.ini" "otherfolder"
应该写成cp "myfolder"/*.ini "otherfolder"
.
这$*
多变的从通配模式来看,这是另一回事*
,两者并没有真正的相关性。该字符串"$*"
将是位置变量(“命令行参数”、$1
、$2
、$3
、 ...)的串联,由 shell 变量的第一个字符IFS
(默认情况下为空格)分隔。