Значение слова = $ word "` expr substr '$ {-b: board}' 1 3` "? - PullRequest
0 голосов
/ 16 января 2019

Я работаю над некоторым преобразованием сценариев bash в C ++ и наткнулся на эту строку ...

word="yahoo"

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

Я понимаю, что делает expr substr, но аргумент, который я предоставляю "$ {-b: board}", не имеет никакого смысла для меня.

Когда я попытался запустить это на терминале:

 echo $word

Выход:

 yahoo${

Буду признателен за любой вклад, спасибо.

1 Ответ

0 голосов
/ 16 января 2019

Этот вопрос не о Bash или sh, а о expr, отдельной команде, которая входит, например, в GNU Coreutils.Если мы свяжемся с руководством , мы обнаружим, что

expr вычисляет выражение и записывает результат в стандартный вывод.Каждый токен выражения должен быть отдельным аргументом.

и

substr <i>string position length</i>
Возвращает подстроку начала stringна 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}

Но результат тот же, и без дополнительного контекста, кажется, не имеет никакого смысла.

...