Bagaimana Anda memeriksa apakah $*
kosong? Dengan kata lain, bagaimana cara memeriksa apakah tidak ada argumen yang diberikan untuk suatu perintah?
Bagaimana Anda memeriksa apakah $*
kosong? Dengan kata lain, bagaimana cara memeriksa apakah tidak ada argumen yang diberikan untuk suatu perintah?
Jawaban:
Untuk memeriksa apakah tidak ada argumen yang disediakan untuk perintah, periksa nilai $#
variabel,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Jika Anda ingin menggunakan $*
( tidak disukai ),
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Beberapa penjelasan:
Pendekatan kedua tidak disukai karena ekspansi parameter posisi *
memperluas ke parameter posisi, mulai dari satu. Ketika ekspansi terjadi dalam tanda kutip ganda, itu berkembang menjadi satu kata dengan nilai setiap parameter dipisahkan oleh karakter pertama dari variabel khusus IFS. Itu berarti sebuah string dibangun. Jadi ada overhead tambahan.
Di sisi lain #
memperluas ke jumlah parameter posisi.
Contoh:
$ command param1 param2
Sini,
Nilai $#
is 2 dan nilai $*
is string "param1 param2" (tanpa tanda kutip), jika IFS tidak disetel. Karena jika IFS tidak disetel, parameter dipisahkan oleh spasi
Untuk lebih jelasnya man bash
dan baca topik bernama Parameter Khusus
[ $# -eq 0 ]
adalah bentuk IME yang paling umum. Ada kasus tepi di mana "$#"
bisa kosong: jika ada satu argumen yang kosong, atau jika ada beberapa argumen kosong dan $IFS
kosong.
"$*"
ekspresi juga akan mengevaluasi untuk ""
jika hanya satu ""
parameter disahkan. Tetapi sebagian besar waktu Anda mungkin tidak akan peduli.
bash
. Anda menggunakan sh
untuk mengeksekusi skrip. AFAIK ==
hanya valid dalam bash
.
Jika Anda hanya tertarik untuk membayar jika argumen tertentu tidak ada, Substitusi Parameter bagus:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
ini adalah salah satu cara Anda bisa tahu bahwa Anda tidak punya argumen
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...
, atauif (($# == 0)); ...
, atauif [ $# -eq 0 ]; ...
, atau! (($#)) && ...
, atau(($#)) || ...