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

标签 bash

我经常遇到这样的情况:我想对匹配特定模式的所有文件运行给定的命令。因此我有以下内容:

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/

相关文章:

bash - Git Bash - 在文件(或字符串)中查找匹配指定子字符串的单词

r - 调用系统命令并将变量作为参数传递给管道

bash - 如何复制列?

linux - 是否有更改终端透明度的命令?

linux - 如何使用 ulimit 限制进程的运行时间?

regex - 搜索和替换哈希值。我究竟做错了什么?

php - PHP 脚本中的 chdir 调用 shell 脚本的问题

java - Ubuntu 中的 Bash 脚本错误 : awk: line 1: regular expression exceeds implementation size limit

python - 使用python的调度程序

bash - 如何在Docker Compose中有条件地运行命令