Bash诠释&&作为一个论点

时间:2016-10-21 00:45:50

标签: linux bash

请注意以下内容

[admin@myVM ~]$ test="echo hello && echo world"
[admin@myVM ~]$ $test
hello && echo world
[admin@myVM ~]$ echo hello && echo world
hello
world

看来,如果你放置&&进入bash变量并将其作为命令执行,bash解释&&作为字符串参数。有谁知道如何改变这种行为?也就是说,有没有人知道怎么告诉bash“我想要执行双&符号”。

1 个答案:

答案 0 :(得分:5)

变量并不意味着存储脚本。将代码存储在函数中,而不是变量。

$ test() { echo hello && echo world; }
$ test
hello
world

$test不起作用的原因是因为不带引号的变量扩展只受到bash的两个解析阶段的影响:

  1. 分词
  2. 通配
  3. 这意味着它会将$test拆分为单独的单词,这就是它识别echo命令的原因。它还将扩展通配符AKA globs。不过,这些只是解析它的两个部分。它不会查找&&|;等符号。

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