通过作为参数传递的命令对循环变量进行Bash访问

时间:2019-03-28 22:50:02

标签: bash

我经常遇到一种情况,我想在与特定模式匹配的所有文件上运行给定命令。因此,我有以下内容:

iterate.sh

#!/bin/bash
for file in $1; do
    $2
done

所以我可以像iterate.sh "*.png" "echo $file"

那样使用它

问题是当命令运行时,它似乎无权访问$ file变量,因为该示例命令只会为每个文件输出空白行。

如何从程序的参数中引用迭代器$file

1 个答案:

答案 0 :(得分:3)

#!/bin/bash
for file in $1; do
    eval $2
done

iterate.sh "*.png" 'echo $file'

$file处的参数周围需要单引号,因此它不会在命令行上扩展。需要在循环中eval才能在参数中实际执行命令,而不仅仅是扩展参数。