Saya menggunakan getopts untuk mem-parsing argumen dalam skrip bash sebagai
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
akan menyimpan opsi / argumen yang tidak diparsing. Karena saya ingin menggunakan exeparams untuk menyimpan opsi agar suatu perintah dapat dieksekusi di dalam skrip (yang dapat tumpang tindih dengan opsi skrip sendiri), saya ingin menggunakan - untuk mengakhiri opsi yang diteruskan ke skrip. Jika saya lulus mis
myscript -d myscriptparam -- -d internalparam
exeparams
akan memegang
-- -d internalparam
Saya sekarang ingin menghapus yang memimpin --
untuk meneruskan argumen ini ke perintah internal. Apakah ada cara yang elegan untuk melakukan ini atau bisakah saya mendapatkan string yang hanya memegang sisanya tanpa --
dari getop?
shift; OPTIND=1
di dalamgetopts
lingkaran mungkin bukan cara terbaik untuk melakukannya. Ini hanya berfungsi dalam kasus Anda karena Anda hanya memiliki 2 opsi dan di semua yang lain Anda hanya keluar dari skrip. Kalau tidak, Anda akan membutuhkanshift; OPTIND=1
di setiap opsi, yang berarti kode duplikat (praktik buruk). Lakukanshift $((OPTIND - 1))
segera setelah akhir loop - ini adalah cara yang paling konvensional dan mungkin yang paling efisien juga.