bash - 遍历数组并执行存储在变量中的命令

标签 bash unix

我正在尝试编译一个大项目,这涉及到我去不同的目录并在那里编译东西。 我有三个数组,它们都包含命令,第一个数组包含目录遍历,第二个数组包含编译命令,第三个数组包含错误消息。

我的数组是这样设置的

task[0]="cd vssl/make/; make clean;"
compile[0]="make all"
error[0]="echo \"We failed at vssl install\""

task[1]="cd ../../web/make/; make clean;"
compile[1]="make install"
error[1]="echo \"We failed at web install\""

现在我需要一个像这样工作的for循环

for i in {0..$size_of_array}
do
    eval ${task[$i]}
    if (eval ${compile[$i]}); then
        echo "Done"
    else
        eval ${error[$i]}
        break
    fi
done

我尝试了很多东西,但不确定如何实现。 for i in "${task[@]}" 对我也不起作用,因为我有三个变量。有人对如何解决这个问题有任何见解吗?

感谢任何能提供帮助的人。 :)

最佳答案

task 数组的大小是 ${#task[@]}(漂亮的语法,嗯?)。所以你可以开始你的循环

for ((i=0; i<${#task[@]}; ++i))

有关详细信息,请参阅 for 命令和 bash(1) 中有关 ARITHMETIC EVALUATION 的部分。

关于bash - 遍历数组并执行存储在变量中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009885/

相关文章:

bash - @(${VAR}) 是什么意思?

ORACLE:需要导出表数据,列之间没有空格

c - TCP 操作超时

c - 什么是 CPU_STATE_MAX?

bash - Crontab 不工作(已完成标准故障排除)

linux - 每天将 Bash 脚本转换为 tar.gz 文件

bash - 为什么求幂的优先级低于一元加减的优先级?

linux - 通过 Bash 登录站点 (Stack Overflow)

unix - 如何更改 shell 脚本的字符编码?

linux - 如何从当前目录中的所有文件夹中删除 Linux 中具有特定文件名的文件?