Jak sprawdzić, czy $*
jest pusty? Innymi słowy, jak sprawdzić, czy nie podano argumentów dla polecenia?
źródło
Jak sprawdzić, czy $*
jest pusty? Innymi słowy, jak sprawdzić, czy nie podano argumentów dla polecenia?
Aby sprawdzić, czy nie podano argumentów dla polecenia, sprawdź wartość $#
zmiennej,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Jeśli chcesz użyć $*
( nie preferowane ),
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Niektóre wyjaśnienia:
Drugie podejście nie jest preferowane, ponieważ w parametrach pozycyjnych rozszerzenie *
rozszerza się na parametry pozycyjne, zaczynając od jednego. Kiedy rozwinięcie występuje w obrębie podwójnych cudzysłowów, rozwija się do pojedynczego słowa z wartością każdego parametru oddzieloną pierwszym znakiem zmiennej specjalnej IFS. Oznacza to, że łańcuch jest zbudowany. Jest więc dodatkowe obciążenie.
Z drugiej strony #
rozwija się do liczby parametrów pozycyjnych.
Przykład:
$ command param1 param2
Tutaj,
Wartość $#
wynosi 2, a wartość $*
ciągu „param1 param2” (bez cudzysłowów), jeśli IFS jest rozbrojony. Ponieważ jeśli IFS nie jest ustawione, parametry są oddzielane spacjami
Aby uzyskać więcej informacji man bash
i przeczytać temat o nazwie Parametry specjalne
if ! (($#)); ...
, lubif (($# == 0)); ...
, lubif [ $# -eq 0 ]; ...
, lub! (($#)) && ...
, lub(($#)) || ...
[ $# -eq 0 ]
jest najczęstszą postacią IME. Istnieją przypadki krawędzi, w których"$#"
może być pusty: jeśli istnieje jeden argument, który jest pusty, lub jeśli istnieje kilka pustych argumentów i$IFS
jest pusty."$*"
Wyrażenie będzie również ocenić na""
razie tylko jeden""
parametr został przekazany. Ale przez większość czasu i tak prawdopodobnie nie będziesz się tym przejmować.bash
. Używaszsh
do wykonania skryptu. AFAIK==
jest ważny tylko wbash
.Jeśli interesuje Cię zwolnienie za kaucją tylko w przypadku braku konkretnego argumentu, podstawienie parametru jest świetne:
źródło
jest to jeden ze sposobów, w jaki możesz wiedzieć, że nie dostałeś żadnych argumentów
źródło