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


25

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

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

if [ $# -eq 0 ]
then

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


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`

и т.п.


8

То есть

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.