$(コマンド)とは何ですか?


10

bashスクリプトで次の構文を見ました。

 >$(command) &

&末尾のアンパサンドによってコマンドがバックグラウンドで実行されることは知っていますが、ドル記号とコマンドの前後の角かっこと組み合わせて使用​​したことはありません。

それは何をするためのものか?


私はそのような使い方を知って$( )いますが、残りはありません。それはちょうど$(command) &、それが私を混乱させるものです。
AlphaOmega

回答:


20

簡潔な答え

構文を考えると、$(command) &結果は、runningの出力を取得し、それをコマンドとして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

「コマンド」の出力をコマンドとして受け取り、それをバックグラウンドで実行します。その機能は「評価」に匹敵します


これは、ターミナルウィンドウに存在する記号であり、実行しようとしていることによっては、ユーザーが入力する必要がない場合があります。ターミナルを開くとすぐに表示されます。
monkeyman_stones 2016年

わかりません。短いですが、これは実際の質問に答えますが、受け入れられた答えは答えません。
mveroone 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.