gpt4 book ai didi

Bash [[ 测试,引用变量

转载 作者:行者123 更新时间:2023-11-29 09:02:08 25 4
gpt4 key购买 nike

我想决定是否总是省略 Bash [[ 测试中出现的变量的引号。我对 man 页面的解释是,在不损失任何正确性的情况下允许这样做。


我设计了这个简单的“测试”来验证我的想法和“预期的行为”,但它可能什么都证明不了,看看它:

x='1 == 2 &&'
if [[ $x == '1 == 2 &&' ]]; then
echo yes
else
echo no
fi

注意我不是这样写的:

x='1 == 2 &&'
if [[ "$x" == '1 == 2 &&' ]]; then
echo yes
else
echo no
fi

到目前为止,这一直是我的风格,如果没有别的,就是为了保持一致性。


将我的编码约定切换为始终 省略 [[ 测试中出现的变量的引号是安全的吗?

我正在努力学习 Bash,我正在努力这样做,养成良好的习惯、良好的风格和正确性..

最佳答案

要记住的关键是,模式匹配上下文 中的引号和转义总是会导致其内容变成文字。在 [[ 中的 == 的左侧引用是没有必要的,只有右侧被解释为模式。如果您想要文字匹配并避免解释变量中的模式元字符,则需要在右侧引用。

换句话说,[ "$x"= "$x"][[ $x == "$x"]] 大部分是等价的,并且当然在 Bash 中后者应该是首选。

一个快速提示:将 [[ ]] 复合命令的运算符视为与其他控制运算符 例如 elifdo;;;;&(尽管从技术上讲,它们在手册中是重新属于他们自己的类别)。它们实际上是复合命令部分的分隔符,这就是它们如何获得看似神奇的特性,如短路扩展的能力。这应该有助于阐明 [[ 的许多行为,以及为什么它不同于例如算术运算符,它们不是那样的。

更多示例:http://mywiki.wooledge.org/BashFAQ/031#Theory

关于Bash [[ 测试,引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com