Traceroute出力をシェル変数に保存するのは難しいですか?

Traceroute出力をシェル変数に保存するのは難しいですか?

出力をフィルタリングし、tracerouteそれをシェル変数(配列)に保存する必要があります。ところで、ちょっと珍しい結果が出ますね。

次の行で説明しようとしています。

私の現在のディレクトリはあり、temp一部のファイルは次のとおりです。

/temp$ ls 
ask.html  data_dump (2)  DB-Assignemnt .sql    

tracerouteコマンドラインから実行すると、期待どおりに出力が正しくなります。

/temp$ traceroute -m 5 www.google.com  | awk '{print  $2 , $3}'
to www.google.com
172.22.0.1 (172.22.0.1)
ABTS-North-Static-085.3.160.122.airtelbroadband.in (122.160.3.85)
* *
203.101.83.197 (203.101.83.197)
182.79.254.249 (182.79.254.249

出力を変数に保存するとa

/temp$ a=$(traceroute -m 5 www.google.com | awk '{print $2 , $3}')

echo $a出力がわからないとき。

~/temp$ echo $a
to www.google.com 172.22.0.1 (172.22.0.1) ABTS-North-Static-
085.3.160.122.airtelbroadband.in (122.160.3.85) Ask.html data_dump SQLAsk.html data_dump(2) DB-Assignemnt .sql Ask.html data_dump(2) DB-Assignemnt .sql Ask.html data_dump(2) DB-Assignemnt .sql
203.101.100.186(203.101.100.186)

ls自分で実行され、入力が変数に保存されるのはなぜですかa

答え1

を実行すると、echo $aシェルは「単語の分離」を実行し、すべての重要なスペースを失います。

二重引用符を使用してみてくださいecho "$a"

引用すると、ファイル名拡張が発生しないようにすることもできます。

バラよりhttp://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

関連情報