如何在bash中检查变量中的空间?

时间:2018-11-21 15:35:59

标签: bash

我正在努力学习bash,并且正在开发一段接受输入并检查是否包含空格的代码。想法是,变量不应包含任何空格,因此代码应回显适当的消息。

5 个答案:

答案 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:]]}的扩展名,但是[[ ... ]]会为我们处理引号。