Saya bukan orang Linux tetapi terjebak dalam beberapa Script yang harus saya baca untuk Proyek saya. Jadi adakah yang bisa membantu saya apa yang dilakukan perintah ini?
shift $(($optind - 1))
bash
shell
shell-script
Celana Gaurav
sumber
sumber
Jawaban:
shift $((OPTIND-1))
(noteOPTIND
adalah huruf besar) biasanya ditemukan segera setelah satugetopts
while
loop.$OPTIND
adalah jumlah opsi yang ditemukan olehgetopts
.Seperti yang disebutkan pauljohn32 dalam komentar, secara tegas,
OPTIND
memberikan posisi argumen baris perintah berikutnya .Dari Manual Referensi Bash GNU :
shift
nmenghapus n string dari daftar parameter posisi. Dengan demikian
shift $((OPTIND-1))
menghapus semua opsi yang telah diuraikan olehgetopts
dari daftar parameter, dan setelah titik itu,$1
akan merujuk pada argumen non-opsi pertama yang diteruskan ke skrip.Memperbarui
Seperti mikeserv menyebutkan dalam komentar,
shift $((OPTIND-1))
bisa jadi tidak aman. Untuk mencegah pemisahan kata yang tidak diinginkan dll, semua ekspansi parameter harus dikutip ganda. Jadi bentuk aman untuk perintah adalahshift "$((OPTIND-1))"
sumber
find
) mungkin terlihat seperti mereka mengizinkan opsi setelah non-opsi, tetapi mereka tidak: mereka memiliki operan yang dimulai dengan tanda hubung.IFS
, tetapi lebih baik aman daripada menyesal. ;)IFS=0123456789
,shift $((OPTIND-1))
(tanpa tanda kutip) akan berubah menjadishift ""
mana yang akan diabaikan (dalamksh
) secara diam-diam atau menghasilkan kesalahan (dalambash
dandash
).$((...))
hanya menghitung barang. Dalam kasus Anda dibutuhkan nilai$optint
dan kurang 1.shift
menghapus parameter posisi. Dalam kasus Anda itu menghapusoptint-1
parameter.Untuk informasi lebih lanjut kita lihat
help getopts
,help shift
, lihatman bash
untuk "Ekspansi Aritmatika", dan terutama google untukgetopts
.sumber