String 测试字符串是否为"*&引用;
出于某种原因,我无法得到一个if语句来测试字符串是否等于星号。我已经尝试了我能想到的每一种组合,我不想弄乱文件全球化。请帮忙String 测试字符串是否为"*&引用;,string,bash,variables,if-statement,String,Bash,Variables,If Statement,出于某种原因,我无法得到一个if语句来测试字符串是否等于星号。我已经尝试了我能想到的每一种组合,我不想弄乱文件全球化。请帮忙 if [ $VAR = "\*" ]; then *更新* 这两个建议都有效。问题显然不是*比较,而是if语句的另一部分。这是为了比较$VAR是否介于0和20之间,或者是否为通配符 if [ "$VAR" -gt 0 ] && [ "$VAR" -lt 20 ] || [ "$VAR" = "*" ]; then IF语句的另一部分显然搞错了最后的比较
if [ $VAR = "\*" ]; then
*更新*
这两个建议都有效。问题显然不是*比较,而是if语句的另一部分。这是为了比较$VAR
是否介于0和20之间,或者是否为通配符
if [ "$VAR" -gt 0 ] && [ "$VAR" -lt 20 ] || [ "$VAR" = "*" ]; then
IF语句的另一部分显然搞错了最后的比较
*更新*
只是再次测试并检查我的语法。当$VAR
介于0和20之间时,它工作得很好(true),当$VAR
超过20时,它也工作(报告false),但是,当我尝试将$VAR
设置为*时,if语句会异常并弹出:
line 340: [: *: integer expression expected
当变量可能包含全局模式、空格或其他不需要解释的可解释序列时,请引用这些变量。如果$VAR
为空,也可以避免语法错误
对于第二个问题,[“$VAR”-gt 0]
如果$VAR
不是一个数字,那么它就没有意义。因此,您必须避免在这种情况下对该测试进行评估。只需交换测试-|
和&&
短路(至少在bash中,不确定这是否是POSIX):
使用bash的另一个版本: 双括号允许您使用
&&
和| |
。此外,bash不会对[[
的参数执行分词或全局扩展,因此$VAR
不需要被引用,(
不需要转义)
[[
如果您需要(一些)可移植性,也可以在zsh和ksh中使用。不,仍然可以使用第336行:[:*:integer expression Expected你有两个演示来证明这一点。你确定这和你说的是同一句话吗?你能准确地发布你现在所拥有的吗?好的,事实上这是可行的。问题显然是我的if语句。例如,如果一个数字大于0且小于20或等于*请查看我的更新abo你的例子很有效。这是我的IF语句的另一部分,它把一切都搞糟了。我认为-a
是不受欢迎的。你应该使用{[“$VAR”-gt 0]&&[$VAR-lt 20];}
。
$ VAR="*"
$ if [ "$VAR" = "*" ] ; then echo Star ; fi
Star
if [ "$VAR" = "*" ] || [ "$VAR" -gt 0 -a "$VAR" -lt 20 ] ; then
if [[ $VAR = "*" || ($VAR -gt 0 && $VAR -lt 20) ]]; then