次のスクリプトを使用して、他のファイルから呼び出されているphpスクリプトの出現を再帰的に検索しています。
find . -exec grep -Hn $1 {} \; | grep -v ^Binary;
よく働く!ここで、次に実行するアクションを決定するために、返された結果が必要です。
r=$(find . -exec grep -Hn $str {} \; | grep -v ^Binary;)
if [ -z "$r" ];
then
Do this
else
Do something else
fi
問題:それ自体で、findスクリプトは結果をそれぞれ新しい行に返します。
./path/to/file.php
./path/to/another_file.php
./path/to/third_file.php
ただし、出力を$ r変数に割り当てる場合、改行文字は保持されず、結果は1行に出力されるため、読みにくくなります。
./path/to/file.php ./path/to/file.php ./path/to/third_file.php
出力を変数に割り当てるときに改行文字を保持するにはどうすればよいですか?
$r
で何をしているのかはわかりませんが、きっとそうです
echo $r
改行を保持するには、変数を二重引用符で囲む必要があります
echo "$r"
引用符で囲まれていない場合、変数は 単語分割 の対象となります。ここで、空白のシーケンスはすべて 1 (改行を含む)は単一のスペースに置き換えられます 1
1:デフォルトでは、$IFS
の内容によって異なります(デフォルト:スペース、タブ、改行)