在 shell 变量中保存跟踪路由输出是否困难?

在 shell 变量中保存跟踪路由输出是否困难?

我需要过滤输出并将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

相关内容