#!/bin/bash
s1="hi"
s2="hi"
if ["$s1" == "$s2"]
then
echo match
fi
我使用if
,使用[["$s1" == "$s2"]]
,使用=
,==
和-eq
,使用$s1
,$s2
和if [[ "$s1" == "*$s2*" ]]
尝试使用{{1}}语句的各种形式我仍然收到以下错误:
[hi:命令未找到
我查看了各种网站和教程并复制了这些内容和教程,但它不起作用 - 我做错了什么?
最后,我想说{{1}}是否包含{{1}},我该怎么办呢?
我做了空位...:/我怎么说包含?
我试过
{{1}}
但它不起作用。
答案 0 :(得分:746)
对于字符串比较,请使用:
if [ "$s1" == "$s2" ]
对于a
包含b
,请使用:
if [[ $s1 == *"$s2"* ]]
(并确保在符号之间添加空格):
坏:
if ["$s1" == "$s2"]
好:
if [ "$s1" == "$s2" ]
答案 1 :(得分:149)
你需要空格:
if [ "$s1" == "$s2" ]
答案 2 :(得分:130)
你应该小心在'['和双引号的符号之间留一个空格,其中变量包含这个:
if [ "$s1" == "$s2" ]; then
# ^ ^ ^ ^
echo match
fi
^
显示您需要离开的空格。
答案 3 :(得分:31)
我建议这个:
if [ "$a" = "$b" ]
注意打开/关闭括号和变量之间的空白区域以及包裹' ='的空白区域。登录。
另外,请注意脚本标题。你是否使用
并不是一回事#!/bin/bash
或
#!/bin/sh
答案 4 :(得分:15)
我建议:
#!/bin/bash
s1="hi"
s2="hi"
if [ $s1 = $s2 ]
then
echo match
fi
没有双引号且只有一个等于。
答案 5 :(得分:14)
Bash4 +示例。注意:当单词包含空格等时,不使用引号会导致问题。总是引用bash IMO。
以下是BASH4 +的一些例子:
示例1,在字符串中检查“是”(不区分大小写):
if [[ "${str,,}" == *"yes"* ]] ;then
示例2,在字符串中检查“是”(不区分大小写):
if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then
示例3,在字符串中检查“是”(区分大小写):
if [[ "${str}" == *"yes"* ]] ;then
示例4,在字符串中检查“是”(区分大小写):
if [[ "${str}" =~ "yes" ]] ;then
示例5,完全匹配(区分大小写):
if [[ "${str}" == "yes" ]] ;then
示例6,完全匹配(不区分大小写):
if [[ "${str,,}" == "yes" ]] ;then
示例7,完全匹配:
if [ "$a" = "$b" ] ;then
答案 6 :(得分:12)
这个问题已经有了很好的答案,但在这里似乎在使用单个等号和双等号之间存在轻微的混淆
if [ "$s1" == "$s2" ]
主要区别在于您使用的是哪种脚本语言。如果您使用 bash ,请在脚本开头添加#!/bin/bash
,并将脚本另存为filename.bash
。要执行使用bash filename.bash
- 那么您必须使用==
。
如果您使用 sh ,请使用#!/bin/sh
并将脚本另存为filename.sh
。要执行使用sh filename.sh
- 那么您必须使用单=
。避免混合它们。
答案 7 :(得分:8)
$ if [ "$s1" == "$s2" ]; then echo match; fi
match
$ test "s1" = "s2" ;echo match
match
$
答案 8 :(得分:6)
我现在无法访问linux盒子,但是[实际上是一个程序(和内置的bash),所以我认为你必须在[和第一个参数之间]留一个空格。
另请注意,字符串相等运算符似乎是单个=
答案 9 :(得分:5)
这比答案更清晰! 是的,线索在错误消息中:
[hi:命令未找到
向您显示您的" hi"已被连接到" ["。
与更传统的编程语言不同,在Bash中," ["是一个命令就像更明显的命令" ls"它没有被特别对待,因为它是一个符号,因此" ["和(替代)" $ s1"在你的问题中紧挨着彼此,加入(对Bash来说是正确的)然后它尝试在那个位置找到一个命令:[hi - Bash不知道。
在C和其他一些语言中," ["将被视为一个不同的角色类"并将脱离以下"嗨"。
因此在开幕后你需要一个空格" ["。
答案 10 :(得分:2)
#!/bin/bash
s1="hi"
s2="hi"
if [ "x$s1" == "x$s2" ]
then
echo match
fi
在里面添加额外的字符串使它更安全。
您还可以对单行命令使用其他表示法:
[ "x$s1" == "x$s2" ] && echo match
答案 11 :(得分:2)
对于纯Bash而没有test
的版本,但真的很难看,请尝试:
if ( exit "${s1/*$s2*/0}" )2>/dev/null
then
echo match
fi
说明:在( )
中打开一个额外的子shell。如果有匹配则退出0,如果没有匹配引发错误(丑陋),它会尝试退出$ s1。此错误定向到/dev/null
。