Bash 在字符串中未检测到空格
我使用dig查找子域的IP并将其分配给名为string的变量。此子域有2个IP,IP之间用空格分隔。我想说,如果字符串中有空格,就宣布它。我使用以下代码:Bash 在字符串中未检测到空格,bash,Bash,我使用dig查找子域的IP并将其分配给名为string的变量。此子域有2个IP,IP之间用空格分隔。我想说,如果字符串中有空格,就宣布它。我使用以下代码: #!/bin/bash string=$(dig +short google.com) echo $string if [[ "$string" =~ \ |\' ]] # slightly more readable: if [[ "$string" =~> then echo "Matches" else ech
#!/bin/bash
string=$(dig +short google.com)
echo $string
if [[ "$string" =~ \ |\' ]] # slightly more readable: if [[ "$string" =~>
then
echo "Matches"
else
echo "No matches"
fi
虽然“string”中有空格,但表示“no matches”。我还尝试了换行符(\n),也没有检测到。怎么了?条目之间用换行符分隔。您应该习惯于引用您所引用的字符串
echo
中的case$string
*$'\n'*)回显“匹配”;;
*)回声“没有匹配”;;
以撒
诊断消息可能应转到标准错误(添加重定向到&2
)
此外,shebang行中的
#
也很重要;文件的前两个字节必须正好是#编码>以使此构造正常工作。条目用换行符分隔。您应该习惯于引用您所引用的字符串echo
中的case$string
*$'\n'*)回显“匹配”;;
*)回声“没有匹配”;;
以撒
诊断消息可能应转到标准错误(添加重定向到&2
)
此外,shebang行中的#
也很重要;文件的前两个字节必须正好是#
以使此构造正常工作。使用host
可能比使用dig
更好,因为前者提供一个shell返回代码来指示成功或失败:
如果host example.com>/dev/null
然后
回声“匹配”
其他的
回显“不匹配”
fi
使用host
可能比使用dig
更好,因为前者提供一个shell返回代码来指示成功或失败:
如果host example.com>/dev/null
然后
回声“匹配”
其他的
回显“不匹配”
fi
那不是空格,那是换行符。@GordonDavisson我试过换行符,\n也没有检测到它使用$'\n'
,而不是\n
,来匹配换行符。第一步引用字符串:用echo“$string”
替换echo$string
,这不是空格,这是一个换行符。@GordonDavisson我试过换行符,\n也没有检测到它。使用$'\n'
,而不是\n
,来匹配换行符。第一步引用字符串:用回音“$string”
替换回音“$string”
如果[[“$string”=*$'\n'*]]
(在bash中,所以一定要修复shebang)。是的,我只是觉得case
的噪音比较小。有关echo
为什么将换行符显示为空格的更多信息,请参见如果[[“$string”=*$'\n'*]](在bash中,一定要修复shebang),也可以使用。是的,我发现大小写
的噪音更小。有关回音
将换行符显示为空格的原因的更多信息,请参阅