Pada dasarnya, saya ingin "mencabut" kejadian pertama dari -inf
daftar parameter. (Parameter yang tersisa akan diteruskan ke perintah yang berbeda.)
Skrip yang saya miliki memiliki struktur sebagai berikut:
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
Apakah ada cara yang baik untuk melakukan ini?
BTW, meskipun saya terutama tertarik pada jawaban yang berlaku untuk /bin/sh
, saya juga tertarik pada jawaban yang hanya berlaku untuk /bin/bash
.
Jawaban:
POSIXly:
Kode di atas bahkan bekerja di shell pra-POSIX, kecuali shell Almquist asli (Baca Catatan Akhir ). Ubah
for
loop ke:jaminan untuk bekerja di semua kerang.
Satu lagi POSIX:
Dengan yang satu ini, Anda harus menghapus pertama
(
di(pattern)
untuk membuatnya bekerja pada kulit pra-POSIX.sumber
$1
). Properti ini sangat berguna dalam apa yang saya lakukan. Juga, terima kasih telah mengingatkan saya bahwain "$@";
bit di bagian atasfor
loop tidak perlu. Itu adalah sesuatu yang pernah saya lihat sebelumnya, tetapi saya cenderung melupakannya. Mengenai komentar Anda di shell Almquist, apakahdo
harus muncul di baris berikutnya, atau akanfor arg; do
bekerja juga?for arg; do
bekerja di shell Almquistfor arg do
adalah ungkapan singkat untukfor arg in "$@"; do
. Itu membuat saya sekitar 5 detik! Beberapa orang mungkin mengatakan yang terakhir ini lebih mudah dibaca :)Saya menemukan pertanyaan ini ketika mencoba menyelesaikan masalah yang sama, namun saya ingin memproses semua argumen non-opsi (yang tidak dimulai dengan
-
) hingga--
pemisah yang diterima . Saya ingin mencabut argumen yang diproses saja dan membiarkan yang tersisa di situ dalam urutan yang disediakan.Inilah yang saya pikirkan.
sumber