Як перевірити, чи $*
порожній? Іншими словами, як перевірити, чи не було аргументів, наданих команді?
Як перевірити, чи $*
порожній? Іншими словами, як перевірити, чи не було аргументів, наданих команді?
Відповіді:
Щоб перевірити, чи не було аргументів, наданих команді, перевірте значення $#
змінної,
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 ]; ...
, або! (($#)) && ...
, або(($#)) || ...