shell中如何给输入变量赋值

shell中如何给输入变量赋值

我要求用户输入并在变量中获取输入,例如 $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 必须作为第一个参数调用。

相关内容