【问题标题】:how to keep nested BASH parameter untokenized如何保持嵌套 BASH 参数未标记
【发布时间】:2017-08-15 19:07:27
【问题描述】:

考虑一下这个陈旧的 BASH 脚本:

g1="f 2.txt"
g2="f1.txt $g1"
cp $g2

失败是因为我向cp 命令传递了三个参数。如何逃避$g1 调用以使其在最后一行仅传递两个(呃,使其工作而不在第三行传递两个变量)?我尝试在它周围加上引号,但没有成功;然后它继续将引号作为参数的一部分传递,这很奇怪。

在我的真实场景中,我有一些可选参数,它们本身带有参数。我想在脚本的顶部将它们全部解析出来,如果没有传入,则将它们的最终解析值留空。

【问题讨论】:

  • 不清楚。您实际上要执行什么命令?是cp f1.txt f\ 2.txt
  • 请使用您提到的参数更新您的示例。否则像这样引用 g2="f1.txt '$g1' " 应该可以工作
  • @Vladimir:这起作用;引号和转义符在变量被替换之前被解析,所以当它们成为命令的一部分时,它们达到预期效果已经太晚了。我不确定我是否正确理解了这个问题,但对于像这样的任何东西,数组通常是正确的答案。见herehere
  • @GordonDavisson ,我对您的第二个链接感到满意。感谢您发布它。
  • @anubhava ,是的,你理解示例代码的意图。

标签: bash shell


【解决方案1】:

您可以使用 shell 数组来做到这一点:

g1="f 2.txt"
g2=("f1.txt" "$g1")

cp "${g2[@]}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多