Что означает $ # в оболочке?

25

Что $#значит в оболочке?

У меня есть такой код

if [ $# -eq 0 ]
then

Я хочу понять, что это $#значит, но поиск в Google очень плох для поиска подобных вещей.

BufBills
источник
3
Для поиска с пунктуацией мне нравится использовать symbolhound.com. Обычно находит то, что мне нужно.
Эрик Андрес
Вы можете просмотреть руководство
чудо173
Для лучшей ссылки и SEO: удар, знак числа , резкое, U + 0023, & # 35 ;, знак комментария и доллар!
Климент

Ответы:

37

Вы всегда можете проверить справочную страницу вашей оболочки. man bashговорит:

Special Parameters
   #      Expands to the number of positional parameters in decimal.

Поэтому сценарий оболочки может проверить, сколько параметров передается с помощью кода, подобного следующему:

if [ "$#" -eq 0 ]; then
  echo "you did not pass any parameter"
fi
Михась
источник
@NoName Вы можете manпочти все, включая manсебя. Также попробуйте aproposнекоторое время.
CVn
@NoName вы также можете при использовании ОС с инструментами GNU (linux и т. Д.) Использовать infoлибо для справочной страницы, либо дополнительную информацию (очень детализированную и разрозненную), если в пакетах их есть
Olivier Dulac
12

На самом деле,

`$` refer to `value of` and
`#` refer to `number of / total number`

Так вместе

`$#` refer to `The value of the total number of command line arguments passed.`

Таким образом, вы можете использовать $#для проверки количества переданных аргументов / параметров, как вы это сделали, и обрабатывать любые непредвиденные ситуации.

Точно так же мы имеем

`$1` for `value of 1st argument passed`
`$2` for 'value of 2nd argument passed`

и т.п.

sivareddy963
источник
8

То есть

  1. количество параметров, с которыми был вызван скрипт

  2. количество параметров, которые были установлены в скрипте set -- foo bar

  3. (при использовании внутри функции) количество параметров, с которыми была вызвана функция (также setбудет работать там).

Это объясняется на странице руководства bash в блоке «Специальные параметры».

Хауке Лагинг
источник