Bash Shell测试字符串特性

你希望在使用字符串前先检查一下它们的值。这些字符串可以是用户输入、读入的文件或传入脚本的环境变量。如何用 bash 脚本实现呢?

解决方案

你可以在 if 语句中使用单方括号形式的 test 命令进行一些简单的测试,其中包括检查变量是否包含文本以及两个变量中的字符串是否相同。

讨论

我们来看看下面的例子 。

#!/usr/bin/env bash
# 实例文件:checkstr
#
# if语句测试变量中的字符串长度是否为0
#
# 使用命令行参数
VAR="$1"
#
# if [ "$VAR" ]这种形式通常也管用,但并不是一种好的写法,加上-n会更清晰
if [ -n "$VAR" ]
then
    echo has text
else
    echo zero length
fi
#
if [ -z "$VAR" ]
then
    echo zero length
else
    echo has text
fi

我们特意使用了“长度是否为 0”这个短语。长度为 0 的变量有两种:设置为空串的变量和不存在的变量。示例中的测试并不区分这两种情况。它只关心变量中是否有字符存在。

重要的是要将 $VAR 放进引号,否则测试会被一些怪异的用户输入干扰。如果 $VAR 的值是 x -a 7 -lt 5 且没有使用引号,那么下列语句:

if [ -z $VAR ]

就会变成(在变量扩展之后):

if [ -z x -a 7 -lt 5 ]

这是一种更为复杂的测试语法,完全有效,但结果可就不是你想要的了(也就是说,它测试的并非是字符串长度是否为 0)。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!