Нет, не все сценарии, предназначенные для удара, работают с тире. Много 'bashism' не будут работать в тире, таком как C-стиль для циклов и операторов сравнения двойной скобки. Если у Вас есть ряд сценариев удара, которые Вы хотите использовать для тире, можно рассмотреть использование checkbashisms. Этот инструмент проверит Ваш сценарий на функции только для удара, которые, вероятно, не будут работать в тире.
Проверять, не было ли никаких аргументов, предоставленных команде, контрольному числу $#
переменная затем,
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
и считайте тему под названием Специальные Параметры
Если вы заинтересованы только в том, что вы заинтересованы только в том случае, если бы особый аргумент отсутствует, замена параметра велик:
#!/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 ]; ...
, или! (($#)) && ...
, или(($#)) || ...
– nicerobot 02.12.2011, 23:13[ $# -eq 0 ]
наиболее распространенная форма IME. Существует пограничный случай где"$#"
может быть пустым: если существует отдельный аргумент, который пуст, или если существует несколько пустых аргументов и$IFS
пусто. – Gilles 'SO- stop being evil' 03.12.2011, 01:50"$*"
выражение также оценит к""
если только один""
параметр был передан. Но большую часть времени Вы не будете, вероятно, заботиться о так или иначе. – manatwork 03.12.2011, 15:15bash
. Вы используетеsh
выполнить сценарий. AFAIK==
допустимо только вbash
. – Sachin Divekar 05.12.2011, 21:05