Mr *_*ubs 572 bash scripting if-statement
我正在尝试使用Bash(使用Ubuntu)获得一个if声明:
#!/bin/bash
s1="hi"
s2="hi"
if ["$s1" == "$s2"]
then
echo match
fi
Run Code Online (Sandbox Code Playgroud)
我尝试了各种形式的if语句,使用[["$s1" == "$s2"]],有和没有引号,使用=,==和-eq,但我仍然得到以下错误:
[hi:命令未找到
我查看了各种网站和教程并复制了这些内容,但是它不起作用 - 我做错了什么?
最后,我想说是否$s1包含$s2,所以我该怎么做?
我刚刚解决了空位...:/我怎么说包含?
我试过了
if [[ "$s1" == "*$s2*" ]]
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
mar*_*cog 806
对于字符串比较,请使用:
if [ "$s1" == "$s2" ]
Run Code Online (Sandbox Code Playgroud)
对于a包含b,使用:
if [[ $s1 == *"$s2"* ]]
Run Code Online (Sandbox Code Playgroud)
(并确保在符号之间添加空格):
坏:
if ["$s1" == "$s2"]
Run Code Online (Sandbox Code Playgroud)
好:
if [ "$s1" == "$s2" ]
Run Code Online (Sandbox Code Playgroud)
unw*_*ind 157
你需要空格:
if [ "$s1" == "$s2" ]
Run Code Online (Sandbox Code Playgroud)
小智 140
你应该小心在'['和双引号的符号之间留一个空格,其中变量包含:
if [ "$s1" == "$s2" ]; then
# ^ ^ ^ ^
echo match
fi
Run Code Online (Sandbox Code Playgroud)
在^S显示你需要离开的空白.
Abd*_*DMA 33
我建议这个:
if [ "$a" = "$b" ]
Run Code Online (Sandbox Code Playgroud)
注意打开/关闭括号和变量之间的空白区域以及包裹"="符号的空格.
另外,请注意脚本标题.你是否使用它并不是一回事
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
要么
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
这是源头.
小智 17
我会建议:
#!/bin/bash
s1="hi"
s2="hi"
if [ $s1 = $s2 ]
then
echo match
fi
Run Code Online (Sandbox Code Playgroud)
没有双引号,只有一个等于.
Mik*_*e Q 16
Bash4 +示例.注意:当单词包含空格等时,不使用引号会导致问题.总是引用bash IMO.
以下是BASH4 +的一些示例:
例1,检查字符串中的"是"(不区分大小写):
if [[ "${str,,}" == *"yes"* ]] ;then
Run Code Online (Sandbox Code Playgroud)
例2,检查字符串中的"是"(不区分大小写):
if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then
Run Code Online (Sandbox Code Playgroud)
例3,检查字符串中的"是"(区分大小写):
if [[ "${str}" == *"yes"* ]] ;then
Run Code Online (Sandbox Code Playgroud)
例4,检查字符串中的"是"(区分大小写):
if [[ "${str}" =~ "yes" ]] ;then
Run Code Online (Sandbox Code Playgroud)
例5,完全匹配(区分大小写):
if [[ "${str}" == "yes" ]] ;then
Run Code Online (Sandbox Code Playgroud)
例6,完全匹配(不区分大小写):
if [[ "${str,,}" == "yes" ]] ;then
Run Code Online (Sandbox Code Playgroud)
例7,完全匹配:
if [ "$a" = "$b" ] ;then
Run Code Online (Sandbox Code Playgroud)
Rah*_*iya 14
这个问题已经有了很好的答案,但在这里看来,使用单个等号和双等号之间存在轻微的混淆
if [ "$s1" == "$s2" ]
Run Code Online (Sandbox Code Playgroud)
主要区别在于您使用的是哪种脚本语言.如果您正在使用bash,那么请#!/bin/bash在脚本的开头包含并将脚本保存为filename.bash.要执行使用bash filename.bash- 那么你必须使用==.
如果您正在使用sh,请使用#!/bin/sh并将脚本另存为filename.sh.要执行使用sh filename.sh- 那么你必须使用单一=.避免混合它们.
$ if [ "$s1" == "$s2" ]; then echo match; fi
match
$ test "s1" = "s2" ;echo match
match
$
Run Code Online (Sandbox Code Playgroud)
这比答案更清晰!是的,线索在错误消息中:
[hi:命令未找到
这表明你的"hi"已被连接到"[".
与更传统的编程语言不同,在Bash中,"["是一个命令就像更明显的"ls"等 - 它没有被特别对待,因为它是一个符号,因此"["和(替换)"$ s1 "在你的问题中彼此紧挨着的,加入(对Bash来说是正确的)然后它试图在那个位置找到一个命令:[hi - Bash不知道.
在C和其他一些语言中,"["将被视为一个不同的"字符类",并且将与以下"hi"脱节.
因此,在打开"["后需要一个空格.
使用:
#!/bin/bash
s1="hi"
s2="hi"
if [ "x$s1" == "x$s2" ]
then
echo match
fi
Run Code Online (Sandbox Code Playgroud)
在里面添加额外的绳子可以使其更安全。
您还可以对单行命令使用另一种表示法:
[ "x$s1" == "x$s2" ] && echo match
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1018270 次 |
| 最近记录: |