Cara lain untuk melakukan hal ini adalah dengan memberi nama parameter yang ingin Anda deklarasikan dan kemudian melakukannya:
{ cat >./foo
chmod +x ./foo
eight=declared ./foo
eight=declared_and_preferred \
./foo 1 2 3 4 5 6 7 8
./foo 1 2 3 4 5 6 7 8
./foo
} <<\SCRIPT
#!/usr/bin/sh
: ${eight:=${8:-some_default}}
printf '$eight = %s\n' "$eight"
#END
SCRIPT
KELUARAN
$eight = declared
$eight = declared_and_preferred
$eight = 8
$eight = some_default
Dalam contoh di atas variabel lingkungan yang dinyatakan secara eksplisit lebih disukai daripada argumen baris perintah, tetapi argumen baris perintah digunakan ketika variabel lingkungan kosong atau tidak disetel. Ketika posisi ke-8 dan variabel lingkungan $eight
kosong atau tidak disetel, nilai default some_default ditetapkan $eight
. Dalam kedua kasus itu :
dapat dihapus dari:-
:=
pernyataan atau jika kosong harus menjadi nilai yang dapat diterima.
Variabelnya $eight
juga dapat diatur seperti:
printf '$eight = %s\n' "${eight:=${8:-some_default}}"
... dan baris sebelumnya dihilangkan seluruhnya tetapi saya ingin menunjukkan bahwa mendeklarasikan variabel dengan cara itu menghasilkan nilai yang persisten, dan jadi saya melakukannya dalam dua perintah. Either way$eight
diatur ke nilai akhir dari ekspansi parameter majemuk.
getopts
- untuk skrip yang kuat - seringkali merupakan cara terbaik untuk menangani opsi perintah . Parameter posisi, di sisi lain, hampir selalu merupakan cara paling sederhana untuk menangani operan dengan kuat dalam skrip.
Sebagai contoh:
touch file$(seq -ws\ file 100)
./foo *
KELUARAN
$eight = file008
Di sana kami hanya melihat operan kedelapan, tetapi ada 101 di antaranya menggumpal dari direktori pengujian saya.