Як $ {! #} Працює в bash, щоб отримати останній аргумент командного рядка?


19

У Посібнику розширених сценаріїв Bash, щоб отримати останній аргумент командного рядка:

Або: lastarg=${!#} Це непряме посилання на $#змінну.
Зверніть увагу, що lastarg=${!$#}це не працює.


4
Як осторонь, ABS цілком нахмурився як еталон; див. wooledge.org/~greybot/meta/abs про історію його фактоїду на irc.freenode.org # bash каналі. Вікі Баш-хакерів і Wooledge BashGuide не настільки сумно відомої щільності для неточностей. В останньому непрямі посилання детально висвітлюються у BashFAQ № 6 ; в колишньому, wiki.bash-hackers.org/syntax/pe#indirection
Чарльз Даффі

1
Лише питання: Чи не !$простіше і не те саме?
unxnut

Відповіді:


27

Як мовиться, це непряме посилання. Візьмемо такий приклад:

$ var=test
$ test='Hello, world'
$ echo ${!var}
Hello, world

Тепер, якби я встановив наступні позиційні параметри:

$ set -- one two three

І $#буде представляти загальну кількість позиційних параметрів:

$ echo $#
3

Це означає, що коли я називаю це так, як ${!#}кажу, дайте мені значення параметра, названого 3:

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