我经常遇到一种情况,我想在与特定模式匹配的所有文件上运行给定命令。因此,我有以下内容:
iterate.sh
#!/bin/bash
for file in $1; do
$2
done
所以我可以像iterate.sh "*.png" "echo $file"
问题是当命令运行时,它似乎无权访问$ file变量,因为该示例命令只会为每个文件输出空白行。
如何从程序的参数中引用迭代器$file
?
答案 0 :(得分:3)
#!/bin/bash
for file in $1; do
eval $2
done
iterate.sh "*.png" 'echo $file'
在$file
处的参数周围需要单引号,因此它不会在命令行上扩展。需要在循环中eval
才能在参数中实际执行命令,而不仅仅是扩展参数。