シェルスクリプトからパラメータリストからパラメータを削除する方法は?

シェルスクリプトからパラメータリストからパラメータを削除する方法は?

次の(MWE)シェルスクリプトがありますfoo

#!/bin/bash
ARGS=("$@") # all arguments
## => if it exists, we need to drop the argument "-D" here
ls -l ${ARGS[@]} | sort -fk8 

fooパラメータを使用して呼び出された場合-D(パラメータリストの場所が不明)、パラメータリスト-Dからそのパラメータをどのように削除できますか?たとえば、最後のパラメータを削除できることがわかりましたが、パラメータが渡されるunset ARGS[${#ARGS[@]}-1]順序はよくわかりません。

ベストアンサー1

簡単な方法は、単に位置パラメータを繰り返し配列に収集し、パラメータを更新するために-D使用set --することです。

for param; do 
    [[ ! $param == '-D' ]] && newparams+=("$param")
done
set -- "${newparams[@]}"  # overwrites the original positional params

おすすめ記事