在子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脚本有关。
请参阅相关案例的说明:https://stackoverflow.com/a/60238806/2010413