Как указано в комментарии, у вас есть неправильные цитаты; видео будет иметь обратные выходы (`
, ASCII 96), а не одинарные кавычки ('
, ASCII 39).
Кроме того, все, что использует этот устаревший синтаксис для подстановки команд или expr
, составляет по меньшей мере 20 лет назад, и его следует избегать в пользу современных конструкций POSIX.
#!/bin/sh
i=1
while true
do
echo "$i" # Note proper quoting
i=$((i+1))
done
В Bash, вы можете использовать расширение скобки или цикл C-стиль for
, но они не являются переносимыми современной sh
.
Если вам нужен ваш код для портативных систем до POSIX, моя рекомендация по-прежнему заключается в том, чтобы сначала изучить современные конструкции, особенно для простого кода, подобного этому (где в производственной системе вы, вероятно, захотите использовать Awk или Perl для такой петли в любом случае).
Чтобы оценить _command_ в RHS присвоения переменной, вы должны заключить его в _backticks_ ('\' ... \ '') или, предпочтительно, '$ (...)'. Включение чего-то в цитаты _single_ заставляет содержимое строки быть взято _literally_. – mklement0
'$ (...)' не обязательно будет работать в этом случае, потому что OP, похоже, использует 'sh'. Только в системах, где sh связан с, скажем, 'bash', это сработает. – user1934428