Bash:将未转义的 string/characters 从变量插入命令
Bash: Insert unescaped string/characters from variable into command
在 bash(GNU bash,版本 3.2.57)中,我想将变量(未转义)的确切内容替换为以下命令。
为了说明我的意思,给定以下字符串变量:
s="2>&1 > /dev/null"
如果我尝试将确切的字符串插入到命令中:
bash --version $s || echo "will install bash"
(此命令只是为了问题的简单示例)
实际执行的命令是这样的:
bash --version '2>&1' '>' /dev/null
插入的字符串被转义,这是我不想要的。
我想要的是以某种方式将未转义的 s
的内容插入到执行的命令中,以便执行的命令是这个:
bash --version 2>&1 > /dev/null
我怎样才能做到这一点?
How could I achieve that ?
使用函数代替变量。
run_this_silent() {
"$@" 2>&1 >/dev/null
}
run_this_silent bash --version
如果不使用 eval
(或等效的 bash -c COMMAND
)是不可能在变量中存储重定向的,几乎在所有可以想象的情况下都使用 eval
is a bad solution。如果您想无条件地使一个命令(或一百个命令)静音,最好将重定向显式添加到它们中的每一个。
在 bash(GNU bash,版本 3.2.57)中,我想将变量(未转义)的确切内容替换为以下命令。
为了说明我的意思,给定以下字符串变量:
s="2>&1 > /dev/null"
如果我尝试将确切的字符串插入到命令中:
bash --version $s || echo "will install bash"
(此命令只是为了问题的简单示例)
实际执行的命令是这样的:
bash --version '2>&1' '>' /dev/null
插入的字符串被转义,这是我不想要的。
我想要的是以某种方式将未转义的 s
的内容插入到执行的命令中,以便执行的命令是这个:
bash --version 2>&1 > /dev/null
我怎样才能做到这一点?
How could I achieve that ?
使用函数代替变量。
run_this_silent() {
"$@" 2>&1 >/dev/null
}
run_this_silent bash --version
如果不使用 eval
(或等效的 bash -c COMMAND
)是不可能在变量中存储重定向的,几乎在所有可以想象的情况下都使用 eval
is a bad solution。如果您想无条件地使一个命令(或一百个命令)静音,最好将重定向显式添加到它们中的每一个。