请注意以下几点
[admin@myVM ~]$ test="echo hello && echo world" [admin@myVM ~]$ $test hello && echo world [admin@myVM ~]$ echo hello && echo world hello world
看起来,如果将&放入bashvariables并将其作为命令执行,bash会将&&解释为string参数。 有谁知道如何改变这种行为? 也就是说,有没有人知道如何告诉bash“我要执行双连字符”。
变量并不意味着存储脚本。 将代码存储在函数中,而不是变量。
$ test() { echo hello && echo world; } $ test hello world
$test
不起作用的原因是因为未加引号的变量扩展只受到bash的许多解析阶段中的两个:
这意味着它将把$test
分解成单独的单词,这就是为什么它能识别echo
命令。 它也将扩大AKA的通配符。 尽管如此,这只是解析它的唯一两点。 它不寻找像&&
, |
这样的符号 ,或;
。
我不推荐这样做,但是你可以用bash -c "$test"
或者eval "$test"
来执行你的字符串。 除非绝对必要,否则这些习惯是你应该避免的。 函数比使用eval
黑客好得多,并且不允许任意代码执行来打开潜在的安全漏洞。