Що означає $ # у оболонці?


25

Що $#означає оболонка?

У мене є такий код, як

if [ $# -eq 0 ]
then

Я хочу зрозуміти, що $#означає, але пошук у Google дуже поганий для пошуку таких речей.


3
Для пошуку з розділовими знаками я люблю використовувати symbolhound.com. Зазвичай знаходить те, що мені потрібно.
Ерік Андрес

ви можете переглянути інструкцію
miracle173

Для кращого посилання та SEO: вибух, знак числа , різкий, U + 0023, & # 35 ;, знак коментаря та долар!
Clément

Відповіді:


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або довідкову сторінку, або додаткову інформацію (дуже деталізовану та розділену), якщо в пакетах є кілька
Олів'є Дулак

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 man у блоці "Спеціальні параметри".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.