Bash将&&解释为一个论点

请注意以下几点

[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的许多解析阶段中的两个:

  1. 分词
  2. 通配符

这意味着它将把$test分解成单独的单词,这就是为什么它能识别echo命令。 它也将扩大AKA的通配符。 尽管如此,这只是解析它的唯一两点。 它不寻找像&&|这样的符号 ,或;

我不推荐这样做,但是你可以用bash -c "$test"或者eval "$test"来执行你的字符串。 除非绝对必要,否则这些习惯是你应该避免的。 函数比使用eval黑客好得多,并且不允许任意代码执行来打开潜在的安全漏洞。