我正在努力学习bash,并且正在开发一段接受输入并检查是否包含空格的代码。想法是,变量不应包含任何空格,因此代码应回显适当的消息。
答案 0 :(得分:3)
尝试一下:
#!/bin/bash
if [[ $1 = *[[:space:]]* ]]
then
echo "space exist"
fi
答案 1 :(得分:2)
您可以使用case
在便携式外壳中测试简单的glob模式,而无需任何外部程序或Bash扩展(这是一件好事,因为这样您的脚本对更多人有用)。
#!/bin/sh
case "$1" in
*' '*)
printf 'Invalid argument %s (contains space)\n' "$1" >&2
exit 1
;;
esac
您可能希望在支票中包含其他空格字符-在这种情况下,请使用*[[:space:]]*
作为模式,而不要使用*' '*
。
答案 2 :(得分:1)
您可以使用web Method
,如下所示:
grep
或者您可以使用类似这样的东西:
echo " foo" | grep '\s' -c
# 1
echo "foo" | grep '\s' -c
# 0
答案 3 :(得分:1)
您可以使用wc -w
命令检查是否有单词。如果此输出的结果是大于1的数字,则表示输入中有1个以上的单词。这是一个示例:
#!/bin/bash
read var1
var2=`echo $var1 | wc -w`
if [ $var2 -gt 1 ]
then
echo "Spaces"
else
echo "No spaces"
fi
注意:这里有一个|
(管道符号),这意味着echo $var1
的结果将作为输入通过管道提供给wc -w
。
这是我测试上述代码的链接:https://ideone.com/aKJdyN
答案 4 :(得分:1)
您可以使用parameter expansion删除所有不是空格的内容,然后查看剩下的是否为空字符串:
var1='has space'
var2='nospace'
for var in "$var1" "$var2"; do
if [[ ${var//[^[:space:]]} ]]; then
echo "'$var' contains a space"
fi
done
密钥为[[ ${var//[^[:space:]]} ]]
:
${var//[^[:space:]]}
,所有非空格都将从$var
的扩展中删除。string
为空,则[[ string ]]
的退出状态为非零。这是等效的[[ -n string ]]
的简写。我们也可以引用${var//[^[:space:]]}
的扩展名,但是[[ ... ]]
会为我们处理引号。