在Bash中`shift`但是在数组而不是参数上?

时间:2018-06-13 21:28:17

标签: arrays bash

Titel几乎拥有它。我试图执行--options args事件,而不是运行./command --option1 args --option2 args我正在执行./command '--option1 args --option2 args

array=( $1 )
POSITIONAL=()
while [[ ${#array[@]} -gt 0 ]]; do
key="${array[0]}"
case $key in
    --title)
        title="${array[1]}"
        echo 1
        shift
        shift
        ;;
    --artist)
        artist="${array[1]}"
        echo 2
        shift
        shift
        ;;
    *)      # unknown option
        POSITIONAL+=("${array[0]}") # save it in an array for later
        shift
        ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

在此代码中,shift无效。有没有办法在数组上使用shift

1 个答案:

答案 0 :(得分:3)

您可以使用数组切片来模拟移位:

None

如果你有现有的处理位置参数的代码,你可以从数组中设置它们:

array=(aardvark baboon "clouded leopard" dolphin)
while (( ${#array[@]} ))
do
  echo "Animal: ${array[0]}"
  array=( "${array[@]:1}" )
done