Linux 包含压缩的简单bash字符串无效

Linux 包含压缩的简单bash字符串无效,linux,string,bash,if-statement,comparison,Linux,String,Bash,If Statement,Comparison,我肯定可能有语法错误,但我已经看过了,其他人似乎就是这么写的() 有人能告诉我为什么会发生以下情况吗- h="23538_" if [[ "$h" == "23538_" ]]; then echo "true"; else echo "false"; fi; >> true if [[ *"$h"* == "23538_" ]]; then echo "true"; else echo "false"; fi; >> false 还尝试: h=23538 if [[

我肯定可能有语法错误,但我已经看过了,其他人似乎就是这么写的() 有人能告诉我为什么会发生以下情况吗-

h="23538_"
if [[ "$h" == "23538_" ]]; then echo "true"; else echo "false"; fi;
>> true
if [[ *"$h"* == "23538_" ]]; then echo "true"; else echo "false"; fi;
>> false
还尝试:

h=23538
if [[ *"$h"* == "23538_" ]]; then echo "true"; else echo "false"; fi;
 >> false

if [[ *$h* == "23538_" ]]; then echo "true"; else echo "false"; fi;
>> false

if [[ *{$h}* == "23538_" ]]; then echo "true"; else echo "false"; fi
>> false

h='_23538__'
if [[ *"$h"* == "23538_" ]]; then echo "true"; else echo "false"; fi
简单地说,我正在试图找出$h是否是“23538_”字符串的子字符串


希望有人能帮助我……:)

只有在
==
的情况下,才能在右侧使用模式=操作员。请参见
[[expression]]
下的
manbash

==
时=运算符时,运算符右侧的字符串被视为模式,并根据所述规则进行匹配
下面的模式匹配下,就好像启用了
extglob
shell选项一样

那么:

$ echo $h  # true subset
23538
$ if [[ "23538_" =~ "$h" ]]; then echo "true"; else echo "false"; fi;
true
manbash

另外还有一个二进制运算符=~,具有相同的 优先级为==和!=。当它被使用时,右边的字符串 该运算符被视为一个扩展正则表达式,并相应地进行匹配(如正则表达式(3))


你需要交换参数

 if [[ "23538_"  == *"$h"* ]]; then echo "true"; else echo "false"; fi;
   > true

全局模式只能在右侧变量上使用。如果[[“23538”==*“$h”*],您的意思是这样的
;然后呼应“真”;否则回声“假”;fi
…?它仍然不工作…:/
h=23538;如果[[“23538”=*“$h”*];然后呼应“真”;否则回声“假”;fi
为我打印
真的
。很抱歉你是对的,它正在工作。。。谢谢