在shell脚本中替换

时间:2018-05-02 12:35:18

标签: bash shell

我喜欢在linux shell中评估以下内容

CMD_6='ls'
CMD_7='ls -l'
VER=6
CMD="CMD_"$VER

我期待$CMD执行CMD_6并列出目录内容,但它会引发错误:

-bash: CMD_6: command not found

有人可以解释如何进行替换吗?

3 个答案:

答案 0 :(得分:6)

使用功能。

cmd_6 () { ls; }
cmd_7 () { ls -l; }
ver=6
cmd="cmd_$ver"
"$cmd"

cmd的值不应该比单个函数或命令名更复杂:没有参数,没有其他shell语法。

答案 1 :(得分:2)

...或使用别名:

$ alias cmd_6='ls'
$ ver=6
$ alias cmd="cmd_$ver"
$ alias
alias cmd='cmd_6'
alias cmd_6='ls'

答案 2 :(得分:0)

其他答案解释了如何使用函数和别名,但可以使用变量完成:

foo="ls -l" bar=/bin/bash
$foo $bar

输出:

-rwxr-xr-x 1 root root 1099016 May 17  2017 /bin/bash

但这有点不同:

CMD="CMD_"$VER

要运行它,请执行:

eval \$$CMD

小心eval,只提供已知或已检查输入。