Bourne Shell - 如何识别第一个参数是''

时间:2012-02-23 11:17:56

标签: linux shell parameters sh

Bourne Shell脚本如何知道它收到的第一个参数是''(两个单引号?

我试过

if [ -z "$1" ] ; then
    echo "Wrong number of parameters"
fi

但似乎$1扩展为空字符串,"$1"也是如此。

4 个答案:

答案 0 :(得分:3)

在命令行shell中键入''时,将其转换为参数 - 零长度字符串。 检查包含数字或参数的变量(在检查-z“$ 1”之前)。

# check for any arguments
if [ "$#" -eq 0 ]; ...
# or -- has arguments and first one is ''
if [ "$#" -gt 0 -a -z "$1" ]; ...

有关INTEGER比较测试(-eq,-gt等),请参阅'man test'。

编辑(基于评论的评论):

在Windows上(你使用什么shell?)你必须检查''(两个字符)(cmd.exe以我认为的方式传递它)。在linux上,你的脚本得到一个字符串长度为零的参数。

if [\(“$#” - gt 0 -a -z“$ 1”\) - o“$ 1”=“''”]; ...

答案 1 :(得分:1)

我假设你的意思是传递了一个参数,但它的值是空的。这是检查它的方法:

if [ $# -gt 0 -a "$1" = '' ]
then
    echo '$1 was passed, but empty'
fi

如果要检查传递的参数数量(空或不),请使用$#(参数计数):

if [ $# -eq 0 ]
then
    echo 'no parameters were passed'
fi

如果你想检查两个 double 引号("")和单个引号('')之间的区别,那就没有了仅在Bourne shell中这样做的方法。在执行代码时,这些字符串已经被计算为空字符串。

答案 2 :(得分:0)

''显然不是空字符串;它包含两个字符。做

[ "$1" = "''" ]

但是,在(Linux)命令行中,您必须将参数作为

传递
./script.sh "''"

答案 3 :(得分:0)

if [ "$1" == "--" ] ; then
     echo "Wrong number of parameters"
fi