Как проверить, нет ли никаких параметров, предоставленных команде?

Нет, не все сценарии, предназначенные для удара, работают с тире. Много 'bashism' не будут работать в тире, таком как C-стиль для циклов и операторов сравнения двойной скобки. Если у Вас есть ряд сценариев удара, которые Вы хотите использовать для тире, можно рассмотреть использование checkbashisms. Этот инструмент проверит Ваш сценарий на функции только для удара, которые, вероятно, не будут работать в тире.

78
05.12.2011, 20:53
3 ответа

Проверять, не было ли никаких аргументов, предоставленных команде, контрольному числу $# переменная затем,

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 и считайте тему под названием Специальные Параметры

117
27.01.2020, 19:30
  • 1
    Или if ! (($#)); ..., или if (($# == 0)); ..., или if [ $# -eq 0 ]; ..., или ! (($#)) && ..., или (($#)) || ... –  nicerobot 02.12.2011, 23:13
  • 2
    [ $# -eq 0 ] наиболее распространенная форма IME. Существует пограничный случай где "$#" может быть пустым: если существует отдельный аргумент, который пуст, или если существует несколько пустых аргументов и $IFS пусто. –  Gilles 'SO- stop being evil' 03.12.2011, 01:50
  • 3
    "$*" выражение также оценит к "" если только один "" параметр был передан. Но большую часть времени Вы не будете, вероятно, заботиться о так или иначе. –  manatwork 03.12.2011, 15:15
  • 4
    я верю этому, должен быть = вместо ==... в настоящее время я получаю неожиданную ошибку оператора и изменяюсь на =, решает проблему. –  well actually 05.12.2011, 20:02
  • 5
    @Charlotte, Которая означает, что Вы не используете bash. Вы используете sh выполнить сценарий. AFAIK == допустимо только в bash. –  Sachin Divekar 05.12.2011, 21:05

Если вы заинтересованы только в том, что вы заинтересованы только в том случае, если бы особый аргумент отсутствует, замена параметра велик:

#!/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
15
27.01.2020, 19:30

это один из способов узнать, что у вас нет аргументов

NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
    {do something}
fi
-4
27.01.2020, 19:30

Теги

Похожие вопросы