Saya memiliki sejumlah besar tes pada variabel dalam skrip shell bash (3,00) di mana jika variabel tidak disetel, maka itu menetapkan default, misalnya:
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Sepertinya saya ingat ada beberapa sintaks untuk melakukan ini dalam satu baris, sesuatu yang menyerupai operator ternary, misalnya:
FOO=${ ${VARIABLE} : 'default' }
(meskipun saya tahu itu tidak akan berhasil ...)
Apakah saya gila, atau ada sesuatu seperti itu ada?
Jawaban:
Sangat dekat dengan apa yang Anda posting, sebenarnya:
Atau, yang akan menetapkan
default
untukVARIABLE
juga:sumber
Untuk argumen baris perintah:
yang menetapkan
VARIABLE
nilai argumen pertama yang diteruskan ke skrip atau nilaiDEFAULTVALUE
jika tidak ada argumen yang diloloskan.sumber
Jika variabelnya sama, maka
menetapkan DEFAULT_VALUE ke VARIABEL jika tidak ditentukan. Kutipan ganda mencegah globbing dan pemisahan kata.
Juga lihat Bagian 3.5.3, Ekspansi Parameter Shell , dalam manual Bash.
sumber
HISTTIMEFORMAT
: ${FOO:=DEFAULT1} ${BAR:=DEFAULT2}
Bahkan Anda dapat menggunakan nilai default seperti nilai dari variabel lain
memiliki file
defvalue.sh
jalankan
./defvalue.sh first-value second-value
outputdan jalankan
./defvalue.sh first-value
outputsumber
lihat di bawah 3.5.3 (ekspansi parameter shell)
jadi dalam kasus Anda
sumber
Untuk menjawab pertanyaan Anda dan semua penggantian variabel
sumber
FWIW, Anda dapat memberikan pesan kesalahan seperti:
Ini menampilkan pesan seperti ini dan keluar dengan kode 1:
Contoh yang lebih lengkap dari semuanya:
Keluaran:
$ACTION
mengambil nilai argumen pertama, dan keluar jika kosong$DIRNAME
adalah argumen ke-2, dan default ke direktori saat ini$OUTPUT_DIR
adalah argumen ke-3, atau$HOMEDIR
(jika didefinisikan), yang lain/tmp
,. Ini berfungsi pada OS X, tapi saya tidak yakin itu portabel.sumber
Lalu ada cara untuk mengekspresikan konstruksi 'jika' Anda lebih singkat:
sumber
Berikut ini sebuah contoh
simpan ini sebagai script.sh dan buat itu bisa dieksekusi. jalankan tanpa params
jalankan dengan param
sumber