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ページ(man bash)には(章の中で)と書かれています。リスト):

; で区切られたコマンドは順番に実行されます

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

foo; bar

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

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

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

バッククォートはコマンドの出力を取得するために使用されます(コマンド置換in man bash); 全体の出力をls -A $1 | grep '[abc]'; ls -1 $1変数に代入します。

置換されたコマンドの出力は、特定のパターンに一致するファイルのリスト(隠しヒルドを含む)と、それに続くファイルの完全なリスト(何にでも使用できます...)です。

答え2

いいえ、それらは同じではありません。後者はパイプされますgrep(lsこれはおそらく望んでいることではありません)。セミコロンは単に 2 つの異なるコマンドを区切るだけです。

まず、おそらく使い始めるのは$( ... )バックティックの代わりに、より新しく、より柔軟

これを例に挙げてみましょう:

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

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

あなたの場合、 の出力を一度見て、その出力で、、または をls -A $1含む行を探し、の単一列出力を出力します。一般的にこれは悪い考えです。abcls -1 $1lsを解析すべきではない

関連情報