将最后一个位置参数分配给变量并将其从“$@”中删除

assign last positional parameter to variable and remove it from "$@"

在我的 /bin/sh 脚本中,我需要传递不确定数量的位置参数,并获取最后一个(将最后一个分配给变量 $LAST),然后从中删除最后一个参数$@

例如,我用 4 个参数调用我的脚本:

./myscript.sh AAA BBB CCC DDD

在我的脚本中,我需要回应以下内容:

echo $LAST
DDD

echo $@
AAA BBB CCC

我怎样才能做到这一点?

使用循环将除最后一个参数之外的所有参数移动到位置参数列表的末尾;以便最后一个成为第一个,可以通过 </code> 引用,并且可以使用 <code>shift.

从列表中删除
#!/bin/sh -
count=0
until test $((count+=1)) -ge $#
do
  set -- "$@" ""
  shift
done

LAST=${1-}
shift $((!!$#))

echo "$LAST"
echo "$@"