Bourne Shell脚本如何知道它收到的第一个参数是''
(两个单引号?
我试过
if [ -z "$1" ] ; then
echo "Wrong number of parameters"
fi
但似乎$1
扩展为空字符串,"$1"
也是如此。
答案 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