В случае 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