Bash 如何使用字符串变量作为运算符?

Bash 如何使用字符串变量作为运算符?,bash,shell,operators,Bash,Shell,Operators,我想使用字符串作为运算符: 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中是否可能?有评估解决方案: eval "$my_command

我想使用字符串作为运算符:

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中是否可能?

有评估解决方案:

eval "$my_command $redirect_cmd_str $my_log"

但这并非如评论所示的最佳解决方案。

有评估解决方案:

eval "$my_command $redirect_cmd_str $my_log"

但这并不是如评论所示的最佳解决方案。

Shell语法不支持这种用法。可以通过
eval
实现,但我推荐您。使用它是一个坏习惯,很容易导致漏洞被利用。从安全角度来看,安全地使用
eval
是非常非常棘手的

与将代码存储在变量中不同,更好的作业工具是函数:

然后,只需在任何命令前面加上函数名:

maybe_show my_command arg1 arg2 arg3

$my_command
也不应该是变量。如果它执行动态操作,它也可以是函数。)

Shell语法不支持这种用法。可以通过
eval
实现,但我推荐您。使用它是一个坏习惯,很容易导致漏洞被利用。从安全角度来看,安全地使用
eval
是非常非常棘手的

与将代码存储在变量中不同,更好的作业工具是函数:

然后,只需在任何命令前面加上函数名:

maybe_show my_command arg1 arg2 arg3

$my_command
也不应该是变量。如果它执行动态操作,也可以是函数。)

使用
eval
时,这甚至不是一个好的解决方案。当使用
eval
时,它甚至不是一个好的解决方案。我喜欢您的解决方案,但您能否添加示例,说明如何将
$show\u output
$my\u log
添加为参数?我发现在函数调用之前更改变量很麻烦,但可能我错了。为什么使用
“$@”
而不是
$@
?请参阅:“当展开发生在双引号内时,每个参数展开为一个单独的字。也就是说,
“$@”
相当于
“$1”“2”…
”在函数中处理参数与在脚本中处理参数相同。他们使用相同的语法和技巧。因此,您可以参考一些问题,如参数处理指南。我喜欢您的解决方案,但您能否添加一些示例,说明如何将
$show\u output
$my\u log
添加为参数?我发现在函数调用之前更改变量很麻烦,但可能我错了。为什么使用
“$@”
而不是
$@
?请参阅:“当展开发生在双引号内时,每个参数展开为一个单独的字。也就是说,
“$@”
相当于
“$1”“2”…
”在函数中处理参数与在脚本中处理参数相同。他们使用相同的语法和技巧。因此,您可以参考类似的问题,以获取关于论点处理的指南。