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的单个参数包含空格。
我还想了解嵌套引号的解释方式。
答案 0 :(得分:1)
这样做(只改变了最后一行):
#!/bin/bash
CALLER='./script.sh "this should be one argument"'
eval "$CALLER"
这样做的原因是引用应用于解析过程中与变量替换不同的位置,因此您需要通过解析过程重新运行替换结果($CALLER
)(使用{ {1}}),但引用(eval
左右"…"
)以避免替换所带来的字段拆分。
进一步阅读:the POSIX documentation on this,以及已在评论中提供的链接。