【发布时间】:2011-10-13 00:02:56
【问题描述】:
我有一个字符串
$VAR="I-UAT";
在我的 shell 脚本代码中。我需要一个条件语句来检查该字符串中是否存在"UAT"。
我应该使用什么命令来获取 true 或 false boolean 作为输出? 或者有没有其他方法可以检查?
【问题讨论】:
标签: bash shell scripting substring
我有一个字符串
$VAR="I-UAT";
在我的 shell 脚本代码中。我需要一个条件语句来检查该字符串中是否存在"UAT"。
我应该使用什么命令来获取 true 或 false boolean 作为输出? 或者有没有其他方法可以检查?
【问题讨论】:
标签: bash shell scripting substring
什么外壳?使用 bash:
if [[ "$VAR" =~ "UAT" ]]; then
echo "matched"
else
echo "didn't match"
fi
【讨论】:
[[ "$VAR" = *UAT* ]] -- 右侧必须不加引号以进行模式匹配。
case 的解决方案将适用于任何 POSIX shell。
你可以这样做:
case "$VAR" in
*UAT*)
# code when var has UAT
;;
esac
【讨论】:
case "$VAR" in 始终可以替换为 case $VAR in。 Shell 不会对 case 后面的单词执行 字段拆分 或 路径名扩展。同样,var="$other" 与var=$other 一样安全。
如果您提前知道要查找的字符串,经典方法是 case 语句:
case "$VAR" in
*UAT*) : OK;;
*) : Oops;;
esac
您可以使用适当的命令代替: 命令。这也适用于 Bourne 和 Korn shell,而不仅仅是 Bash。
【讨论】:
found=`echo $VAR | grep -c UAT`
然后测试 $found 非零。
【讨论】:
-c, --count 抑制正常输出;而是打印每个输入文件的匹配行数。
您可以在bash 脚本中使用
if [ "$VAR" != "${VAR/UAT/}" ]; then
# UAT present in $VAR
fi
【讨论】:
用 grep 试试:
$ echo I\-UAT | grep UAT
$ echo $?
0
$ echo I\-UAT | grep UAX
$ echo $?
1
所以测试
if [ $? -ne 0 ]; then
# not found
else
# found
fi
【讨论】: