0

你知道为什么这个循环会返回目录列表结果吗?

#!/bin/bash
/usr/sbin/httpd fullstatus | while read line
do
echo $line
done

71-0 - 0/0/410 . 7.74 47987 0 0.0 0.00 0.76 127.0.0.1 
OPTIONS = bin boot dev error_log etc home lib lib64 lost+found media mnt nohup.out opt proc root sbin selinux srv sys test tmp usr var HTTP/1.0
72-0 - 0/0/103 . 0.14 48912 0 0.0 0.00 0.13 127.0.0.1 
OPTIONS = bin boot dev error_log etc home lib lib64 lost+found media mnt nohup.out opt proc root sbin selinux srv sys test tmp usr var HTTP/1.0

它应该只返回 apache 状态。

71-0 - 0/0/410 . 7.74 48231 0 0.0 0.00 0.76 127.0.0.1 
OPTIONS * HTTP/1.0
72-0 - 0/0/103 . 0.14 49157 0 0.0 0.00 0.13 127.0.0.1 
OPTIONS * HTTP/1.0

谢谢

4

3 回答 3

2

因为这条线在输出

OPTIONS * HTTP/1.0

shell 将“echo”参数中使用的“*”扩展为当前目录中的文件列表。此脚本的输出将根据调用 shell 的 $CWD 不同而有所不同。

转到任何选定的目录,然后键入“echo *”命令。

于 2013-06-28T08:40:01.313 回答
1

因为*得到解释。

记住:

总是引用你的变量

在这种情况下:

echo "$line"
于 2013-06-28T08:39:51.510 回答
0

Piotr 已经回答了这个问题。只是一些补充。我建议不要用管道传输任何东西while!它将创建另一个浪费资源的进程,如果您在循环内定义一个变量while并且想要在循环外使用它,您将面临问题。我可能会建议使用其他解决方案,例如:

#!/bin/bash
while read line; do
echo "$line"
done < <(/usr/sbin/httpd fullstatus)
于 2013-06-28T08:53:30.883 回答