【发布时间】:2009-11-28 20:39:29
【问题描述】:
当我将 2009 作为 arg 传递给这个 shell 函数时,它返回 0,为什么?
isyear()
{
case $arg in
[0-9][0-9][0-9][0-9]) NUM=1 ;;
*) NUM=0 ;;
esac
echo $arg
}
【问题讨论】:
当我将 2009 作为 arg 传递给这个 shell 函数时,它返回 0,为什么?
isyear()
{
case $arg in
[0-9][0-9][0-9][0-9]) NUM=1 ;;
*) NUM=0 ;;
esac
echo $arg
}
【问题讨论】:
您可能指的是$1,而不是$arg。 $arg 没有在任何地方定义,$1 是函数的第一个参数。
【讨论】:
您的意思是使用return 代替echo?
【讨论】:
return的唯一问题是它只会返回0-255范围内的值。这就是经常使用echo 的原因。但是,在这个问题的情况下,这就足够了。
return $NUM
没关系,它应该是 $1 而不是 $arg 和 echo $NUM。
【讨论】:
两个错别字: 首先,您需要使用 $1 而不是 $arg 来获取函数的第一个参数。 其次,我认为您的意思是回显 $NUM 而不是传入的参数!
isyear() {
case $1 in
[0-9][0-9][0-9][0-9]) NUM=1 ;;
*) NUM=0 ;;
esac
echo $NUM
}
你也可以考虑这样修改它:
#!/bin/bash
isyear() {
case $1 in
[0-9][0-9][0-9][0-9]) return 1 ;;
*) return 0 ;;
esac
}
isyear cheese
if [ "$?" -eq "1" ]; then
echo "Yes, it is a year!"
else
echo "Darn!"
fi
isyear 2009
if [ "$?" -eq "1" ]; then
echo "Yes, it is a year!"
else
echo "Darn!"
fi
【讨论】: