0

我正在将一些 bash 脚本转换为 C++ 并遇到了这一行......

word="yahoo"

word=$word"`expr substr '${ -b :board}' 1 3`"

我理解 expr substr 的作用,但我提供的“${ -b :board}” 的论点对我来说没有任何意义。

当我尝试在终端上运行它时:

 echo $word

输出:

 yahoo${

我将不胜感激任何输入,谢谢。

4

1 回答 1

1

这个问题不是关于 Bash 或 sh,而是关于expr,一个独立的命令,它是例如 GNU Coreutils 的一部分。如果我们查阅手册,我们会发现

expr计算表达式并将结果写入标准输出。表达式的每个标记都必须是一个单独的参数。

substr string position length
返回最多长度为string开头的子字符串。如果or是负数、零或非数字,则返回空字符串。positionlengthpositionlength

所以命令

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}

但结果是一样的,如果没有更多的上下文,一开始似乎没有任何意义。

于 2019-01-15T23:08:35.320 回答