Источник использует обратные кавычки(`
)для обозначения подстановки команд. Команда, указанная в обратных кавычках, выполняется, и результат помещается на ее место. В данном случае это простое присвоение переменной, поэтому результат команды присваивается переменной.
Это легко увидеть с опцией -x
для bash:
$ x=`echo "var=500;var%=7;var"|bc`
++ echo 'var=500;var%=7;var'
++ bc
+ x=3
Вместо обратных кавычек вы использовали одинарные кавычки. Одинарные кавычки указывают оболочке сохранять буквальное значение и не применять какую-либо обработку к его содержимому. В результате команда назначается переменной как -. Это соответствующий -x
вывод :
$ x='echo "var=500;var%=7;var"|bc'
+ x='echo "var=500;var%=7;var"|bc'
Наконец, чтобы распечатать содержимое переменной, вы должны использовать echo
или printf
. Когда значение 'x' равно 3, запуск $x
выдаст вам сообщение об ошибке -bash: 3: command not found
. Запуск $x
работал в вашем случае только потому, что команда echo
была частью содержимого переменной.
Как заметил Haxiel, вместо обратных кавычек вы, скорее всего, использовали одинарные кавычки. Но лучше, чем использовать обратные кавычки (`
), я предлагаю вам использовать $()
. Обратные кавычки устарели, а $()
совместим с POSIX.
В вашем примере вы могли бы сделать:
x=$(echo "var=500;var%=7;var" | bc)
echo "$x"
Или в один вкладыш:
echo "var=500;var%=7;var" | bc