Как проверить, $*
пусто ли? Другими словами, как проверить, не было ли аргументов команды?
источник
Как проверить, $*
пусто ли? Другими словами, как проверить, не было ли аргументов команды?
Чтобы проверить, не было ли аргументов, предоставленных команде, проверьте значение $#
переменной затем,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Если вы хотите использовать $*
( не предпочтительно ), то,
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Некоторое объяснение:
Второй подход не является предпочтительным, потому что в позиционном расширении параметров *
расширяется до позиционных параметров, начиная с одного. Когда раскрытие происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенного первым символом специальной переменной IFS. Это означает, что строка построена. Так что есть дополнительные накладные расходы.
С другой стороны #
расширяется количество позиционных параметров.
Пример:
$ command param1 param2
Вот,
Значение $#
равно 2, а значением $*
является строка «param1 param2» (без кавычек), если IFS не установлен. Потому что, если IFS не установлен, параметры разделяются пробелами
Для более подробной информации man bash
и прочитайте тему под названием Специальные параметры
if ! (($#)); ...
, илиif (($# == 0)); ...
, илиif [ $# -eq 0 ]; ...
, или! (($#)) && ...
, или(($#)) || ...
[ $# -eq 0 ]
это самая распространенная форма IME. Есть крайний случай, когда"$#"
может быть пустым: если есть единственный аргумент, который является пустым, или если есть несколько пустых аргументов и$IFS
он пуст."$*"
Выражение будет также оценить,""
если только один""
был принят параметр. Но большую часть времени вам, вероятно, все равно будет все равно.bash
. Вы используетеsh
для выполнения сценария. AFAIK==
действует только вbash
.Если вы заинтересованы в освобождении от обязательств только в том случае, если отсутствует конкретный аргумент, подстановка параметров хороша :
источник
это один из способов узнать, что у вас нет никаких аргументов
источник