Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash解释&&;作为论据_Linux_Bash - Fatal编程技术网

Linux Bash解释&&;作为论据

Linux Bash解释&&;作为论据,linux,bash,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“我想执

注意以下几点

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

如果将&&放入bash变量并将其作为命令执行,bash会将&&解释为字符串参数。有人知道如何改变这种行为吗?也就是说,有人知道如何告诉bash“我想执行双安培”

变量不是用来存储脚本的。将代码存储在函数中,而不是变量中

$ test() { echo hello && echo world; }
$ test
hello
world
$test
不起作用的原因是,不带引号的变量扩展只接受bash的许多解析阶段中的两个:

  • 分词
  • 圆球
  • 这意味着它将把
    $test
    分割成单独的单词,这就是它识别
    echo
    命令的原因。它还将扩展通配符,即globs。不过,这是解析过程中仅有的两个部分。它不寻找像
    &&
    |
    这样的符号

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