问题描述
在子外壳中生成的新值的分配确实可以工作,而无需结尾注释:
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