我需要过滤输出并将traceroute
其存储在 shell 变量(数组)中。但我得到了一些不寻常的输出。
正如我尝试在以下几行中解释的那样。
我当前的目录是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
到 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 (2) DB-Assignemnt 。 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
,shell 会进行“分词”并且所有重要的空格都会丢失。
尝试echo "$a"
使用双引号。
引用还将确保不会发生文件名扩展。
看http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions