У баш-скрипті я побачив такий синтаксис:
>$(command) &
Я знаю, що амперсанд &в кінці робить команду виконуватись у фоновому режимі, але я ніколи не бачив її в поєднанні зі знаком долара плюс дужками навколо команди.
Що це робить?
У баш-скрипті я побачив такий синтаксис:
>$(command) &
Я знаю, що амперсанд &в кінці робить команду виконуватись у фоновому режимі, але я ніколи не бачив її в поєднанні зі знаком долара плюс дужками навколо команди.
Що це робить?
Відповіді:
Враховуючи синтаксис $(command) &, результат такий же, як якщо б ви взяли результат запуску просто, commandа потім спробували запустити це як команду. І все це робилося б на задньому плані, це означає, що в терміналі не було б видимого виводу або вивішування.
Наприклад, якщо у нас був текстовий файл, названий mycommand.txtіз вмістом:
echo "Hello World"
Потім команда
$(cat mycommand.txt) &
було б рівнозначно бігу
echo "Hello World" &
Але оскільки ми додали ampersand ( &), ми не побачимо жодного виводу з цієї команди, тому в цьому прикладі було б досить марно.
$(змінна)Знак долара перед річчю в дужках зазвичай посилається на змінну. Це означає, що ця команда або передає аргумент цій змінній із сценарію bash, або отримує значення цієї змінної для чогось. Різниця в сценаріїх bash для виклику та оголошення змінних є такою:
Оголосіть змінну без знака долара і назвати його з знаком долара. Наприклад, сценарій, який містить це
#!/bin/bash
STR="Hello World!"
echo $STR
Виведе це
Hello World!
()- підміна командЗаміна команди дозволяє вивести команду на заміну самої команди. Заміна команди відбувається, коли команда додається наступним чином:
$(command)
або
`command`
Bash виконує розширення, виконуючи команду в середовищі додаткової оболонки і замінюючи підстановку команди стандартним висновком команди, при цьому будь-які зворотні нові рядки видаляються. Вбудовані нові рядки не видаляються, але вони можуть бути видалені під час розбиття слів. Заміна команди $(cat file)може бути замінена на еквівалент, але швидше $(< file).
&- фоновий процесІ тоді амперсанд, або &символ, як ви сказали, використовується для його запуску у фоновому режимі.
він приймає вихід команди "як команду" і запускає його у фоновому режимі. Його функціонально можна порівняти з "eval"
$( ), але спокою немає. Це просто$(command) &те, що мене бентежить.