我要求用户输入并在变量中获取输入,例如 $1、$2 等。我正在检查变量是否为空值,并希望在空值时替换该值。
if [ "$2" == "" ]; then
2=value
fi
但我缺少一些东西。有什么建议么?
答案1
您不能像这样直接为位置参数设置值。
你能使用set
命令设置它们,但这将设置全部价值 ($1
,$2
, ...)
例如
$ set -- first second third fourth fifth
$ echo $1
first
$ echo $2
second
现在有两种情况$2
可以为空字符串;第一个如果没有传递任何值,或者第二个如果""
作为实际参数传递,因此可能仍然存在 a等$3
。$4
我们可以用稍微复杂的方式处理每种情况:
#!/bin/bash
echo Before 1=$1 2=$2 3=$3 4=$4
if [ -z "$2" ]
then
first=$1
shift 2
set -- "$first" value "$@"
fi
echo After 1=$1 2=$2 3=$3 4=$4
测试中的位if
将确保保留所有其他值。
例如
% ./testing arg1 "" "arg 3" "and arg 4"
Before 1=arg1 2= 3=arg 3 4=and arg 4
After 1=arg1 2=value 3=arg 3 4=and arg 4
但是您也许可以做更简单的事情,只需使用${2:-value}
which 将评估value
是否$2
未设置,这样您就不必担心重写参数。
答案2
尝试
if [ -z "$2" ]; then
set "$1" value
fi
- 请参阅 man 测试(另一种方法是
[ "x$2" == x ]
- 设置将位置参数,将位置作为第二个参数,$1 必须作为第一个参数调用。