Как проверить, $*пусто ли? Другими словами, как проверить, не было ли аргументов команды?
Как проверить, $*пусто ли? Другими словами, как проверить, не было ли аргументов команды?
Ответы:
Чтобы проверить, не было ли аргументов, предоставленных команде, проверьте значение $#переменной затем,
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 ]; ..., или! (($#)) && ..., или(($#)) || ...