Концепция $ argv [1] и $ 1 - PullRequest
       9

Концепция $ argv [1] и $ 1

0 голосов
/ 01 февраля 2019

В чем разница между $argv[1] и $1?
$argv[1] и $argv[$1], что правильно?

Я попробовал приведенные ниже коды и получил выходные данные, как указано ниже:

1)

#!/bin/bash
echo "The user $1 is logged on to the system on"

Выполнить как: bash logs.sh home

Выход: The user home is logged on to the system on

2)

#!/bin/bash
echo "The user $argv[1] is logged on to the system on"

Запуск от имени: bash logs.sh home

Выход: The user [1] is logged on to the system on

3)

#!/bin/bash
echo "The user $argv[$1] is logged on to the system on"

Запуск от имени: bash logs.sh home

Выход: The user [home] is logged on to the system on

Пожалуйста, уточните это.

1 Ответ

0 голосов
/ 01 февраля 2019

В случае bash, я обычно говорю, поиграйте с ним:

> echo $argv[1]
[1]
> argv=blabla
> echo $argv[1]
blabla[1]

Токен $argv[1] анализируется как $argv и [1].$argv раскрывается в значение переменной argv, а [1] остается без изменений.Чтобы получить доступ к массиву по индексу, используйте {}, например.${argv[1]}.Как вы также можете видеть, массивы в bash индексируются с нуля:

> argv=(1 2 3)
> echo ${argv[1]}
2

Переменная argv не является специальным именем для переменной в bash, она не имеет особого значения и не имеет никакого объединения.с позиционными аргументами, передаваемыми в скрипт.Для доступа к аргументам используйте $1 для доступа к первому аргументу, $2 для доступа ко второму, используйте "$@" для расширения параметров каждого в отдельное слово, "$*" расширяет параметры в одно слово и $# получает количество аргументов.

* $argv[$1] также не имеет особого значения вообще.Поскольку переменная argv не задана, $argv разворачивается в ничто.Первый параметр вашего сценария - home, поэтому $1 расширяется до home.[ ] не имеют специального значения вне скобок ${ ... }.[ и ] остались нетронутыми.Таким образом, $argv[$1] расширяется как

`$argv` + `[` + `$1` + `]`
`` + `[` + `home + `]`
`[home]`

. Вы можете проверить $1 переменных с помощью простых функций:

> f() { echo $# 1:$1 2:$2 3:$3; }
> f home 
1 1:home 2: 3:
> f home kamil salini
3 1:home 2:kamil 3:salini
...