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