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