Grave演算子がコマンドの出力形式を変更するのはなぜですか? [コピー]

Grave演算子がコマンドの出力形式を変更するのはなぜですか? [コピー]

こんにちは文を書いて理由を聞きたいです。

  ls -l

各行の後に新しい行がありますが、変数に代入すると

myVariable=`ls -l`

次に、その変数をエコーし​​ます。

echo $myVariable

一行につながりました...ありがとう

答え1

この質問は、2つの別々の問題を引き起こします。

  1. コマンドは、lsファイルやパイプに書き込むときと端末に書き込むときとは異なる動作をします。これら2つのコマンドを比較すると、これがわかります。

    ls
    ls | cat
    

    最初の例では、ls端末に書き込んでいるので、人間が読めるように出力フォーマットを指定するのがわかります。 2 番目の例では、lsファイルまたはパイプに書き込んでいるので、1 行に 1 つの項目を作成するのがわかります。-1または、パラメータを使用して両方の設定を上書きする-Cこともできます。

  2. 変数に割り当てると、ls -l改行が維持されます。しかし、あなたの場合、変数を使用するときに変数を引用しないので、「スペース」(表示されている文字を印刷しないすべて)は実行されるたびに単一のスペースに変換されます。結果の比較

    var=$(ls -l); echo $var
    var=$(ls -l); echo "$var"
    

バラより$VAR対${VAR}と引用詳しくはこちらをご覧ください。また、私が提案した冗長な答えを$(...)好みます。`...`バックティックについて理由を説明しました。

関連情報