Shell、bash、Linux;変数宣言後にセミコロンを追加するのはなぜですか?

Shell、bash、Linux;変数宣言後にセミコロンを追加するのはなぜですか?

これがラインです。

    variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

セミコロンの前の行は理解していますが、セミコロンの後の行はどのように機能するのか理解していません。できる

  after the command(variable assignment) 
  and then run the command after semi-colon?

それでは、次の行は同じですか?

    variable=`ls -A $1 | grep '[abc]' | ls -1 $1`

ありがとう、

答え1

セミコロンは単に2つの連続したコマンドを区別します。マンページ(man bash)には次のように記載されています。リスト):

; を使用してコマンドを分離し、順番に実行します。

たとえば、次はコマンドを最初に実行fooし、次にコマンドを実行しますbar

foo; bar

例を正しく解析するには、まず階層モデルを構築する必要があります。

 variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

(バックティック内にあるもの)と(バックティック内にあるもの)に分解することができます。variable=...ls -A $1 | grep '[abc]'; ls -1 $1

バックティックはコマンドの出力を取得するために使用されます(参照:コマンドの置き換えman bash;したがって、出力全体をls -A $1 | grep '[abc]'; ls -1 $1変数に割り当てます。

置換コマンドの出力は、特定のパターン(隠しシールドを含む)と一致するファイルのリストであり、ファイルの完全なリスト(すべての利用可能なもの...)が追加されます。

答え2

いいえ、彼らは同じではありません。後者はパイプを通って入りますgreplsほとんど確かに望むものではありません)。セミコロンは単に2つの異なるコマンドを区別します。

まず、使用を開始したい場合があります。$( ... )バックティックの代わりに新しく柔軟性

例として:

$ var=`echo foo; echo bar`
$ echo "$var"
foo
bar

$( ... )バックティック(または)は、その間に含まれるコードの実行中に標準出力に印刷された内容を返すと考えることができます。

あなたの場合は、出力を一度見て、ls -A $1出力からまたはを含む行を見つけて、a出力の単一の列を印刷bします。一般的に言えば、これは悪い考えです。cls -1 $1lsを解析しないでください。

関連情報