【问题标题】:Nested quotes in bash -- passing single argument containing spaces [duplicate]bash中的嵌套引号-传递包含空格的单个参数[重复]
【发布时间】:2015-07-18 03:37:26
【问题描述】:

script.sh:

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

包装器.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

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

【问题讨论】:

标签: bash shell nested quotes


【解决方案1】:

这可行(仅更改了最后一行):

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

原因是在解析过程中引用与变量替换在不同的地方应用,因此您需要通过解析过程(使用eval)重新运行替换的结果($CALLER) ),但引用($CALLER 周围的"…")以避免已经替换的字段拆分。

延伸阅读:the POSIX documentation on this,以及 cmets 中已经给出的链接。

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2017-03-23
    • 2021-03-20
    • 2015-09-10
    • 2019-12-11
    相关资源
    最近更新 更多