Yanıtlar:
Komuta verilen herhangi bir argüman olup olmadığını kontrol etmek için, $#
değişken değişkeninin değerini kontrol edin ve ardından
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Kullanmak istiyorsanız $*
( tercih edilmez ),
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Bazı açıklamalar:
İkinci yaklaşım tercih edilemez, çünkü konumsal parametrede genleşme konumsal parametrelere *
genişler, birinden başlayarak. Genişleme çift tırnak içinde gerçekleştiğinde, IFS özel değişkeninin ilk karakteri ile ayrılan her parametrenin değeri ile tek bir kelimeye genişler. Bu bir dize inşa edildiği anlamına gelir. Bu yüzden fazladan ek yükü var.
Diğer yandan #
, konumsal parametrelerin sayısına genişler.
Örnek:
$ command param1 param2
İşte,
Değeri $#
2 ve değeri $*
IFS tanımsız ise, (tırnaklar olmadan) dizesi "Param1 param2" dir. Çünkü IFS ayarlanmadıysa, parametreler boşluklarla ayrılır.
Daha fazla ayrıntı man bash
ve Özel Parametreler adlı konuyu okumak için
[ $# -eq 0 ]
IME'nin en yaygın şeklidir. "$#"
Boş olabilen kenar durumu var: boş olan tek bir argüman varsa veya birkaç boş argüman varsa ve $IFS
boşsa.
"$*"
İfadesi ayrıca değerlendirecek ""
tek eğer ""
parametre geçirildi. Ama çoğu zaman zaten muhtemelen umursamayacaksın.
bash
. sh
Komut dosyasını yürütmek için kullanıyorsunuz . AFAIK ==
sadece içinde geçerlidir bash
.
Eğer sadece belirli bir argüman eksikse kurtarma ile ilgileniyorsanız, Parametre Değiştirme harika:
#!/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
Bu, sahip olmadığın herhangi bir tartışmanın olmadığını bildiğin yollardan biri.
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...
, veyaif (($# == 0)); ...
, veyaif [ $# -eq 0 ]; ...
, veya! (($#)) && ...
,(($#)) || ...