我正在将一些bash脚本转换为C ++,并遇到了这条线...
word="yahoo"
word=$word"`expr substr '${ -b :board}' 1 3`"
我了解expr substr的作用,但是我提供的“ $ {-b:board}”参数对我来说没有任何意义。
当我尝试在终端上运行它时:
echo $word
输出:
yahoo${
我将不胜感激,谢谢。
答案 0 :(得分:1)
这个问题与Bash或sh无关,而与expr
有关,这是一个独立命令,例如,它是GNU Coreutils的一部分。如果我们咨询the manual,就会发现
expr
计算一个表达式并将结果写在标准输出上。表达式的每个标记都必须是一个单独的参数。
和
substr string position length
返回以string
开头的position
的子字符串。如果length
或position
为负,零或非数字,则返回空字符串。
所以命令
length
接收字符串expr substr '${ -b :board}' 1 3
并提取一个长度为3的子字符串,从位置1开始,该子字符串为${ -b :board}
。
命令
${
将word=$word"`expr substr '${ -b :board}' 1 3`"
命令放入命令替换(反引号)中,并将结果附加到expr
的扩展名中,该扩展名此时包含$word
,因此您将以这种方式结束与yahoo
。
所有这些,我看不出这样做的理由。 yahoo${
命令的输出是一个常量字符串,因此您实际上可以将所有内容替换为
expr
请注意,在现代Bash中,您可以通过参数扩展获得相同的功能:
word='yahoo${ '
但是结果是一样的,而且没有更多的上下文似乎一开始就没有任何意义。