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))
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))
Jawaban:
shift $((OPTIND-1))(note OPTINDadalah huruf besar) biasanya ditemukan segera setelah satu getopts whileloop. $OPTINDadalah jumlah opsi yang ditemukan oleh getopts.
Seperti yang disebutkan pauljohn32 dalam komentar, secara tegas, OPTINDmemberikan posisi argumen baris perintah berikutnya .
Dari Manual Referensi Bash GNU :
getopts optstring name [args]
getoptsdigunakan oleh skrip shell untuk mengurai parameter posisi.optstringberisi karakter opsi untuk dikenali; jika karakter diikuti oleh titik dua, opsi diharapkan memiliki argumen, yang harus dipisahkan darinya oleh spasi. Tanda titik dua (':') dan tanda tanya ('?') Tidak boleh digunakan sebagai karakter opsi. Setiap kali dipanggil,getoptstempat opsi berikutnya dalam nama variabel shell, inisialisasinamejika tidak ada, dan indeks argumen berikutnya untuk diproses menjadi variabelOPTIND.OPTINDdiinisialisasi ke 1 setiap kali shell atau script shell dipanggil. Ketika opsi membutuhkan argumen, getopts menempatkan argumen itu ke dalam variabelOPTARG. Shell tidak meresetOPTINDsecara otomatis; itu harus secara manual mengatur ulang antara beberapa panggilan kegetoptsdalam permintaan shell yang sama jika satu set parameter baru akan digunakan.Ketika akhir opsi ditemukan,
getoptskeluar dengan nilai kembali lebih besar dari nol.OPTINDdiatur ke indeks argumen non-opsi pertama, dan nama diatur ke '?'.
getoptsbiasanya mem-parsing parameter posisi, tetapi jika lebih banyak argumen diberikanargs,getoptsparsing itu sebagai gantinya.
shift n
menghapus n string dari daftar parameter posisi. Dengan demikian shift $((OPTIND-1))menghapus semua opsi yang telah diuraikan oleh getoptsdari daftar parameter, dan setelah titik itu, $1akan 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 adalah
shift "$((OPTIND-1))"
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 menjadi shift ""mana yang akan diabaikan (dalam ksh) secara diam-diam atau menghasilkan kesalahan (dalam bashdan dash).
$((...))hanya menghitung barang. Dalam kasus Anda dibutuhkan nilai $optintdan kurang 1.
shiftmenghapus parameter posisi. Dalam kasus Anda itu menghapus optint-1parameter.
Untuk informasi lebih lanjut kita lihat help getopts, help shift, lihat man bashuntuk "Ekspansi Aritmatika", dan terutama google untuk getopts.