Что делает $ (команда) и делает?

10

Я видел следующий синтаксис в скрипте bash:

 >$(command) &

Я знаю, что амперсанд &в конце запускает команду в фоновом режиме, но я никогда не видел ее в сочетании со знаком доллара и скобками вокруг команды.

Что оно делает?

Альфа Омега
источник
Я знаю, что такое использование $( ), но нет отдыха. Просто $(command) &это меня смущает.
AlphaOmega

Ответы:

20

Короткий ответ

Учитывая синтаксис $(command) &, то результат будет таким же , как если бы вы взяли выход бежать просто , commandа затем пытался бежать , что в качестве команды. И все это будет сделано в фоновом режиме, что означает, что не будет видимого вывода или зависания в терминале.

Например, если у нас был текстовый файл с именем mycommand.txtс содержанием:

echo "Hello World"

Тогда команда

$(cat mycommand.txt) &

будет эквивалентно бегу

echo "Hello World" &

Но так как мы добавили амперсанд ( &), мы не увидели бы никакого вывода этой команды, поэтому в этом примере это было бы довольно бесполезно.


Длинный ответ (объяснение)

Знак доллара $(переменная)

Знак доллара перед вещью в скобках обычно относится к переменной. Это означает, что эта команда либо передает аргумент этой переменной из скрипта bash, либо получает значение этой переменной для чего-либо. Разница в сценариях bash для вызова и объявления переменных заключается в следующем:

Объявите переменную без знака доллара и назвать его с знаком доллара. Например, скрипт, который содержит это

#!/bin/bash
STR="Hello World!"
echo $STR

Вывел бы это

Hello World!

Скобки ()- Подстановка команд

Подстановка команд позволяет выводу команды заменить саму команду. Подстановка команд происходит, когда команда заключена следующим образом:

$(command)

или

`command`

Bash выполняет расширение, выполняя команду в среде подоболочек и заменяя подстановку команды стандартным выводом команды, удаляя все завершающие символы новой строки. Введенные новые строки не удаляются, но они могут быть удалены во время разделения слов. Подстановка команд $(cat file)может быть заменена эквивалентной, но более быстрой $(< file).

Амперсанд &- Фоновый процесс

А затем амперсанд, или &символ, как вы сказали, используется для запуска в фоновом режиме.

Странный
источник
2

он принимает вывод команды как команду и запускает ее в фоновом режиме. Его функционально сравним с "Eval"

Thom
источник
Это символ, присутствующий в окне терминала, который в зависимости от того, что вы пытаетесь сделать, может не понадобиться для входа. Когда вы откроете терминал, вы сразу увидите его там.
monkeyman_stones
Я не понимаю Хотя и короткий, он отвечает на реальный вопрос, а принятый ответ - нет.
mveroone