【问题标题】:Unclear apostrophe handling of cshcsh 的撇号处理不清楚
【发布时间】:2020-11-30 21:23:24
【问题描述】:

谁能解释一下,为什么

#!/bin/csh
tar --file=test.a --append --transform 's,^,data/,'  data/jobid.dat

按预期工作,创建包含 data/data/jobid.dat 的 test.a, 但是

#!/bin/csh
set opt="--transform 's,^,data/,'"
echo "$opt"
tar --file=test.a --append "$opt"  data/jobid.dat

失败

--transform 's,^,data/,'
tar: unrecognized option '--transform 's,^,data/,''

感谢和欢呼, 马蒂亚斯

【问题讨论】:

    标签: csh apostrophe


    【解决方案1】:

    工作案例将's,^,data/ 视为tar 程序的单个参数,与--transform 参数分开。

    这:set opt="--transform 's,^,data/,'" 将 opt 的值设置为相同的字符串。

    当您执行tar … "$opt" 时, opt 的值被替换为单个命令参数,导致tar 无法识别的参数。该命令随后不会再次拆分为单词 - 单词拆分发生在参数替换之前,并且不会为引号内发生的替换重新执行。

    我相信(但尚未验证)如果你写$foo 不带引号,你会得到你想要的效果。

    【讨论】:

    • 谢谢,您给出了关键提示:“分词”。这样设置 opt=(--transform 's,^,data/,'),创建一个列表,会有所帮助。那么确实不需要引号。
    • 哦,你知道吗 - 在这是一个 csh 问题之前,我什至没有注意到。我的回答好像是 bash。很高兴你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多