String 测试字符串是否为"*&引用;

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语句来测试字符串是否等于星号。我已经尝试了我能想到的每一种组合,我不想弄乱文件全球化。请帮忙

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