bash中的嵌套引号 - 传递包含空格的单个参数

时间:2015-05-07 13:53:03

标签: bash shell nested quotes

script.sh:

#!/bin/bash
echo "First argument: $1"

wrapper.sh:

#!/bin/bash
CALLER='./script.sh "this should be one argument"'
$CALLER

会发生什么:

$ ./wrapper.sh 
First argument: "this

我的期待:

$ ./wrapper.sh 
First argument: this should be one argument

我尝试了不同的练习,使其按照我想要的方式工作,但我找不到调用script.sh的方法,其中包含来自wrapper.sh的单个参数包含空格。
我还想了解嵌套引号的解释方式。

1 个答案:

答案 0 :(得分:1)

这样做(只改变了最后一行):

#!/bin/bash
CALLER='./script.sh "this should be one argument"'
eval "$CALLER"

这样做的原因是引用应用于解析过程中与变量替换不同的位置,因此您需要通过解析过程重新运行替换结果($CALLER)(使用{ {1}}),但引用(eval左右"…")以避免替换所带来的字段拆分。

进一步阅读:the POSIX documentation on this,以及已在评论中提供的链接。