根据https://mywiki.wooledge.org/BashFAQ/050 ...将 bash 命令放入 shell 变量中以便随后执行是一个非常糟糕的主意。
但是以下有什么不好呢?
#!/bin/bash
cmd="for i in \$(seq 3); do echo 'a' 'b c' 'd' \$i | tr '[a-z]' '[A-Z]'; done"
eval "$cmd"
它似乎工作得很好,甚至保留了空格,允许 for 循环并允许管道。
当然它没那么快,但是 bash 真的与速度有关吗?
很多事情都不好。它很难阅读(并且编辑器不会对其进行语法突出显示),难以重用,难以安全修改(一旦引入外部变量,这必然会发生)。
cmd() {
local -ar tokens=(a 'b c' d)
for ((i = 0; i < 3; ++i)); do
echo "${tokens[@]^^}" "$i"
done
}
cmd