Di dalam skrip bash saya, saya ingin menguraikan nol, satu atau dua parameter (skrip dapat mengenalinya), lalu meneruskan parameter yang tersisa ke perintah yang dipanggil dalam skrip. Bagaimana saya bisa melakukan itu?
Di dalam skrip bash saya, saya ingin menguraikan nol, satu atau dua parameter (skrip dapat mengenalinya), lalu meneruskan parameter yang tersisa ke perintah yang dipanggil dalam skrip. Bagaimana saya bisa melakukan itu?
Jawaban:
Gunakan shiftperintah bawaan untuk "memakan" argumen. Kemudian panggil proses anak dan berikan "$@"argumen untuk menyertakan semua argumen yang tersisa. Perhatikan kutipan, mereka harus disimpan, karena mereka menyebabkan perluasan daftar argumen dikutip dengan benar.
$@pada dasarnya memperlakukan setiap elemen dari array sebagai string yang dikutip - mereka dilewatkan tanpa kesempatan untuk ekspansi. Ini juga memastikan bahwa masing-masing dipandang sebagai kata yang terpisah. Penjelasan ini bersama dengan skrip pengujian yang menunjukkan perbedaan ada di sini: tldp.org/LDP/abs/html/internalvariables.html#APPREF
bash menggunakan perintah shift :
misal shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 menghasilkan
1
2 3
$1tanpa mengutipnya "$1", maka shell akan melakukan pemisahan kata, jadi mis. foo barAkan diteruskan sebagai foodan barsecara terpisah.
Bash mendukung parameter subset (lihat Subset dan substring ), sehingga Anda dapat memilih parameter mana untuk diproses / lulus seperti ini.
buka file baru dan edit: vim r.sh:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"menjalankannya:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10hasilnya adalah:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10