在 shell 脚本中使用 "set --" 会导致 "bad number"

Using "set --" in shell script results in "bad number"

使用现有的 shell 脚本并尝试了解 正是它在做什么。
前 7 行被提取出来,但是当我 运行 测试时,它失败并出现 "bad number" 错误。
这是脚本中的代码。

#! /bin/ksh
echo 
DUMMY_INPUT=
set -- $DUMMY_INPUT
shift
VAR1=;shift;shift
echo $VAR1


这是第一个测试。

 > ./runThis.sh arg1 arg2 arg3 arg4 arg5
  arg2
 ./runThis.sh[6]: shift: (null): bad number


根据错误,另一个测试是 运行 仅使用数字,但出现相同的错误。


 > ./runThis.sh 1 2 3 4 5 6 7
 2
 ./runThis.sh[6]: shift: (null): bad number



作为测试,"set --" 命令被注释掉,现在可以使用了。


#! /bin/ksh
echo 
DUMMY_INPUT=
#set -- $DUMMY_INPUT  <-----Comment out this line
shift
VAR1=;shift;shift
echo $VAR1


 > ./runThis.sh arg1 arg2 arg3 arg4 arg5
 arg2
 arg2


 > ./runThis.sh 1 2 3 4 5 6 7
 2
 2



"set"命令的执行是否有误? 知道为什么会失败吗?


+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++

看完回复,我更明白了....


 #! /bin/ksh
 echo 
 DUMMY_INPUT=$@
 set -- $DUMMY_INPUT
 shift
 VAR1=;shift;shift
 echo $VAR1


如果我的操作正确,"set" 命令会将输入参数设置为 DUMMY_INPUT 的内容,而 DUMMY_INPUT 在原始代码中仅设置为单个值。
此代码更改将其设置为整个参数字符串。

当您在 ksh 中调用 shift 但没有定义位置参数时,您会收到错误消息

ksh: shift: (null): bad number

例如:

> set -- a b
> echo 
a
> shift
> echo  
b
> shift
> echo 

> shift
ksh: shift: (null): bad number