繁体   English   中英

Shell脚本双引号

[英]Shell script double quotes

我正在编写一个用于解析日志文件的Shell脚本。 重要的部分是:

rx=$(echo "$logfile" | grep -o "rx_value.*" | grep -o "[0-9]\{1,10\}")
echo rx=$rx

将以下内容打印到STDOUT(WRONG):

rx=

如果我这样从$ logfile中删除双qoutes:

rx=$(echo $logfile | grep -o "rx_value.*" | grep -o "[0-9]\{1,10\}")
echo rx=$rx

将以下内容打印到STDOUT(CORRECT):

rx=0

我非常确定在变量周围使用双引号是一件好事,因此我在脚本中的所有变量上都使用了它们。 到目前为止,我发现的信息表明,如果不对变量加上双引号,则由于单词拆分,乱序等原因,结果可能会出错。

谁能解释这里发生了什么?

编辑:

$ logfile包含使用wget下载的日志文件:

$logfile=(wget -q -O -"http://www.example.com")

我认为您的logfilerx_value和您要查找的数字之间有一个换行符。 带有不带引号的参数扩展名的echo命令会将换行符转换为空格。 请参阅文档中的单词拆分或字段拆分。

您没有提到$logfile的值。 您的信息是正确的-无引号和双引号之间的区别恰恰是字段拆分和通配符。 所以,如果你依靠他们中的一个发生,你会得到双引号错误的结果。

更新 好的,因此您的变量包含一个用wget检索的日志文件。 我可以建议改用管道吗?

rx=$(wget -q -O -"http://www.example.com" |
     grep -o "rx_value.*" |
     grep -o "[0-9]\{1,10\}")

但这可能会输出与双引号示例相同的结果,并且我相信这一点超出了您认为正确的答案。

如果在输出中引用变量会怎样?

echo "rx=$rx"

不这样做通常是“神秘”行为的根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM