【问题标题】:How to expand variable literally when calling perl from csh script?从 csh 脚本调用 perl 时如何逐字扩展变量?
【发布时间】:2013-03-29 17:28:51
【问题描述】:

下面是csh 脚本。

#! /bin/csh
set alpha=10\20\30;
set beta = $alpha.alpha;
perl -p -i.bak -e 's/gamma/'$beta'/' tmp;

tmp 文件仅包含单词 gamma。运行 tmp.csh 后,我希望在 tmp 中使用 10\20\30.alpha,但现在是 102030.alpha

在这种情况下如何保留斜线?

注意:我不喜欢更改 alpha 变量的定义,因为它仅用于脚本中需要采用这种格式 (10\20\30) 的其他地方。

谢谢。

【问题讨论】:

    标签: perl csh


    【解决方案1】:

    在 csh 中,对于您的 alpha 分配,反斜杠被视为“文字 2 或 3”。为了防止 csh 这样做,分配需要用引号引起来。

    #! /bin/csh
    set alpha="10\20\30";
    set beta = $alpha.alpha;
    perl -p -i.bak -e 's/gamma/'$beta'/' tmp;
    

    如果有疑问,“回显”变量以准确查看它们包含的内容通常会有所帮助。我不明白您的最后说明,因为“alpha”变量不等于您最初分配的 10\20\30。

    【讨论】:

    • 您好,这可行,但是如果我在alpha 中有正斜杠怎么办?然后它给出了另一个错误。
    • 您的意思是使用“\2”或“\3”中的控制字符还是“\”后跟“2”或“3”的序列?如果是前者,那么 alpha 中的反斜杠将需要自己转义(反斜杠)。比如'set alpha="10\\20\\30";'
    • 我找到了正斜杠的其他替代方案。而不是 's/gamma/'$beta'/' 我使用 's@gamma@'$beta'@'。这样,它就不会将 $beta 中的正斜杠与替换运算符分隔符混淆。无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2012-06-06
    • 2012-03-17
    • 2011-03-27
    相关资源
    最近更新 更多