Этот вопрос не о 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}
Но результат тот же, и без дополнительного контекста, кажется, не имеет никакого смысла.