Как проверить, $*
пусто ли? Другими словами, как проверить, не было ли аргументов команды?
Как проверить, $*
пусто ли? Другими словами, как проверить, не было ли аргументов команды?
Ответы:
Чтобы проверить, не было ли аргументов, предоставленных команде, проверьте значение $#
переменной затем,
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
и прочитайте тему под названием Специальные параметры
[ $# -eq 0 ]
это самая распространенная форма IME. Есть крайний случай, когда "$#"
может быть пустым: если есть единственный аргумент, который является пустым, или если есть несколько пустых аргументов и $IFS
он пуст.
"$*"
Выражение будет также оценить, ""
если только один ""
был принят параметр. Но большую часть времени вам, вероятно, все равно будет все равно.
bash
. Вы используете sh
для выполнения сценария. AFAIK ==
действует только в bash
.
Если вы заинтересованы в освобождении от обязательств только в том случае, если отсутствует конкретный аргумент, подстановка параметров хороша :
#!/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
это один из способов узнать, что у вас нет никаких аргументов
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...
, илиif (($# == 0)); ...
, илиif [ $# -eq 0 ]; ...
, или! (($#)) && ...
, или(($#)) || ...