36

サブシェルを実行してコマンドの出力を取得すると、改行が失われます。

例えば:

filenames=$(grep 'foobar' /some/dir)
echo $filenames

/some/dir文字列「foobar」を含むファイルが複数あると仮定すると、これらのファイル名は、1 行に 1 つのファイル名ではなく、スペースで区切られた 1 つの長い行に出力されます。

trとにかくファイル名にスペースが含まれている可能性があるため、スペースを改行に戻すために使用することはできません。

改行を維持する方法はありますか?

4

2 に答える 2

46

変数を引用して改行を出力します。

filenames=$(grep 'foobar' /some/dir)
echo "$filenames"
于 2013-05-14T05:47:37.167 に答える
0

パイプのため、最もリソースに優しいわけではありません...

 grep 'foobar' /some/dir/| | awk '{print $1}' | sort -u

出力例を次に示します。

$ grep enc pwman/ui/* | awk '{print $1}'
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
Binary
$ grep enc pwman/ui/* | awk '{print $1}' | sort -u
Binary
pwman/ui/cli.py:
$
于 2013-05-14T05:53:54.550 に答える