stdoutが端末でないときにls-lコマンドを実行したときに改行を有効にする方法

stdoutが端末でないときにls-lコマンドを実行したときに改行を有効にする方法

コマンドを変数に保存しcmd、次の文を使用してコマンドの出力を取得します。

echo `$cmd`

改行がないことを除いて、すべてがうまく機能しますls -l

答え1

コマンドを文字列変数に保存した場合、それを実行するには次のものが必要です。

eval "$cmd"

$cmdこれは、コマンドにスペースを除くシェル特殊文字が含まれていない場合にのみ機能します。通常、文字列変数にコマンドを保存することはお勧めできません。関数を定義する方が良いです。

cmd () {
  ls -l
}

その後、実行できますcmd

最も即時の問題は、引用符なしでコマンド置換を使用するため、コマンド出力がさらに破損することです。変数とコマンドの置換には二重引用符を使用する必要があります。cmd関数として定義されます。

echo "`cmd`"

複雑なコマンドでパニックにならないようにするには、バックティックの代わりにドル括弧を使用してください。

echo "$(cmd)"

バラよりスペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?説明のために。

関連情報