我喜欢在linux shell中评估以下内容
CMD_6='ls'
CMD_7='ls -l'
VER=6
CMD="CMD_"$VER
我期待$CMD
执行CMD_6并列出目录内容,但它会引发错误:
-bash: CMD_6: command not found
有人可以解释如何进行替换吗?
答案 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
,只提供已知或已检查输入。