如何使用字符串变量作为运算符?
我想使用字符串作为运算符:
if [[ "$show_output" = "yes" ]]; then
redirect_cmd_str=' 2>&1 | tee -a'
else
redirect_cmd_str=' &>>'
fi
$my_command $redirect_cmd_str $my_log
是否可以在 shell/bash 中使用?
回答
Shell 语法不支持这种用法。有可能实现,eval但我建议你避免eval. 使用它是一个坏习惯,很容易导致可利用的漏洞。从安全角度来看,eval安全使用非常非常棘手。
不是将代码存储在变量中,更好的工作工具是函数:
maybe_show() {
if [[ $show_output = yes ]]; then
"$@" 2>&1 | tee -a "$my_log"
else
"$@" &>> "$my_log"
fi
}
然后你只需在任何命令前面加上函数名:
maybe_show my_command arg1 arg2 arg3
($my_command也不应该是一个变量。如果它做一些动态的事情,它也可以是一个函数。)