我经常遇到这样的情况:我想对匹配特定模式的所有文件运行给定的命令。因此我有以下内容:
iterate.sh
#!/bin/bash
for file in $1; do
$2
done
所以我可以这样使用它 iterate.sh "*.png""echo $file"
问题是当命令运行时,它似乎无法访问 $file 变量,因为该示例命令只会为每个文件输出一个空行。
如何从程序的参数中引用迭代器$file
?
最佳答案
#!/bin/bash
for file in $1; do
eval $2
done
iterate.sh "*.png" 'echo $file'
需要用单引号将 $file
的参数括起来,这样它就不会在命令行上扩展。需要在循环中进行 eval 来实际执行参数中的命令,而不仅仅是扩展参数。
关于Bash 通过作为参数传递的命令访问循环变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408007/