Оболочка Bash: как присвоить вычисленный bc результат переменной и вывести его?

Оболочка Bash: как присвоить вычисленный bc результат переменной и вывести его?

Я пытаюсь воспроизвести код изздесьвведите описание изображения здесь

По какой-то причине это не работает на моем компьютере. Выход, а не числовое значение, это сама команда.

apple$ x='echo "var=500;var%=7;var"|bc'
apple$ $x
"var=500;var%=7;var"|bc

Я хотел бы знать, почему так. Что я сделал не так?

решение1

Источник использует обратные кавычки ( `) для указания подстановки команды. Команда, указанная в обратных кавычках, выполняется, а результат помещается на ее место. В этом случае это простое присваивание переменной, поэтому результат команды присваивается переменной.

Это легко увидеть с помощью -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команда была частью содержимого переменной.

решение2

Как заметил Хаксиел, вместо символов обратных кавычек вы, скорее всего, использовали одинарные кавычки. Но лучше, чем использовать обратные кавычки ( `), я предлагаю вам использовать $(). Обратные кавычки устарели и $()совместимы с POSIX.

В вашем примере вы могли бы сделать:

x=$(echo "var=500;var%=7;var" | bc)
echo "$x"

Или в одной строке:

echo "var=500;var%=7;var" | bc

Связанный контент