添加内联注释后,Bash命令停止工作

添加内联注释后,Bash命令停止工作,bash,comments,variable-assignment,syntax-highlighting,silent,Bash,Comments,Variable Assignment,Syntax Highlighting,Silent,在子shell中生成的新值的赋值在没有后续注释的情况下有效: newname=$(echo "$newname" | sed 's@TD.'"$oldnewTD"'@TD.r'"$ftd1"'@') 但是如果添加了尾随注释,变量newname将保持不变: newname=$(echo "$newname" | sed 's@TD.'"$oldnewTD"'@TD.r'"$ftd1&qu

在子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
中极其重要,这一点不常被提及,因为由于可读性受损,它看起来太明显了。但是,当您使用语法突出显示时,很容易忽略空白而不注意它(当然,编辑器相关的问题;例如,
vim
受到影响)。我花了很长时间试图找出错误所在

newname=$(echo "$newname" | sed 's@TD.'"$oldnewTD"'@TD.r'"$ftd1"'@') # let us not change NonEqRead to NonEq
如果没有空格,整行将自动失败(即,没有任何错误消息)。据我所知,
bash
试图将哈希解释为子shell或赋值运算符的某个修饰符。无论如何,这似乎与bash脚本的逐字读取方式有关

请参阅相关案例的说明:

From,
以“#”开头的单词会导致忽略该单词和该行上的所有剩余字符
如果没有空格,
#
将不会开始一个单词,而是子shell返回的最后一个单词的一部分。