【问题标题】:Bash command stopped working after adding inline comment添加内联注释后,Bash 命令停止工作
【发布时间】:2020-12-01 06:10:24
【问题描述】:

在子 shell 中生成的新值的赋值确实可以在没有尾随注释的情况下工作:

newname=$(echo "$newname" | sed 's@TD.'"$oldnewTD"'@TD.r'"$ftd1"'@')

但如果添加尾随注释,变量newname 保持不变:

newname=$(echo "$newname" | sed 's@TD.'"$oldnewTD"'@TD.r'"$ftd1"'@')# let us not change NonEqRead to NonEq

为什么?

Bash 版本 5.0.3。

【问题讨论】:

    标签: bash comments variable-assignment syntax-highlighting silent


    【解决方案1】:

    事实证明,散列前的空格bash 中非常重要——这点并不经常被提及,因为它似乎太明显了,否则会损害可读性。但是,当您使用语法突出显示时,很容易忽略该空格而不会注意到它(当然,与编辑器相关的问题;例如,vim 会受到影响)。我花了很长时间试图找出错误所在。

    newname=$(echo "$newname" | sed 's@TD.'"$oldnewTD"'@TD.r'"$ftd1"'@') # let us not change NonEqRead to NonEq
    

    没有空格,整行默默地失败(即,没有任何错误消息)。据我了解,bash 试图将哈希解释为子外壳或赋值运算符的某个修饰符。无论如何,这似乎与如何逐字阅读 bash 脚本有关。

    见相关案例说明:https://stackoverflow.com/a/60238806/2010413

    【讨论】:

    • From gnu.org/software/bash/manual/bash.html#Comments, a word beginning with ‘#’ causes that word and all remaining characters on that line to be ignored 如果没有空格,# 不会开始一个单词,而是作为 subshel​​l 返回的最后一个单词的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2021-10-08
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多