Backticks против брекетов в Bash

Когда я пошел отвечать на этот вопрос , я собирался использовать нотацию ${} , так как я видел так много раз здесь, что предпочтительнее обратных ссылок.

Однако, когда я попробовал

 joulesFinal=${echo $joules2 \* $cpu | bc} 

Я получил сообщение

 -bash: ${echo $joules * $cpu | bc}: bad substitution 

но

 joulesFinal=`echo $joules2 \* $cpu | bc` 

работает отлично. Итак, какие еще изменения мне нужно сделать?

`` Называется Command Substitution и эквивалентно $() (скобки), в то время как вы используете ${} (фигурные скобки).

Таким образом, они равны и означают «интерпретировать команду, размещенную внутри»:

 joulesFinal=`echo $joules2 \* $cpu | bc` joulesFinal=$(echo $joules2 \* $cpu | bc) ^ ^ ( instead of { ) instead of } 

Хотя выражения ${} используются для замены переменных.


От man bash :

Подстановка команды позволяет выводить команду на замену имени команды. Существуют две формы:

  $(command) or `command` 

Кроме того, `` сложнее обрабатывать, например, вы не можете их вложить. См. Комментарии ниже и также Почему $ (…) предпочтительнее ... (backticks)? ,

В конкретном случае они ведут себя несколько иначе:

 $ echo "`echo \"test\" `" test $ echo "$(echo \"test\" )" "test" 

поэтому backticks молча удаляют двойные кавычки.

  • Удалить фиксированный префикс / суффикс из строки в Bash
  • Объяснение оператора двоеточия в:: $ {foo = value}
  • Bash расширяет переменную переменной
  • Согласование файлов с различными расширениями с использованием цикла
  • В чем разница между [и [[в Bash?
  • Как использовать сравнение grep файла в инструкции bash if / else?
  • Расширение Тильды в кавычках
  • Проверка успеха команды в команде bash `if `
  • Что означает -z в Баше?
  • скрипт bash для проверки запущенного процесса
  • Переменные оболочки, находящиеся внутри цикла, не видны вне его
  • Давайте будем гением компьютера.