Выбор конкретного элемента массива

Добавлены эти правила и всегда блокируются при попытке обновления / установки:

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --sport 80 -j ACCEPT

Есть идеи?

{{ 1}}
1
15.12.2018, 18:44
3 ответа

Говорят, что позиционные параметры не являются массивом.
И способ, который существует для их установки, — через set. Никакому другому массиву это не нужно.

$ set -- one two t33 f44
$ printf '%s\n' "$@"
one
two
t33
f44

Но, по крайней мере, в bash (и ksh и zsh )их можно было выбрать так же просто:

$ set -- one two t33 f44
$ echo "${@:2:1}"
two
$ echo "${@:2:2}"
two t33
1
27.01.2020, 23:33

$@это не массив :это просто список аргументов. В bash вы можете создать массив, инициализировать его значениями из $@, а затем использовать индексацию :

.
declare -a foo=($@)

echo ${foo[2]}

Индексы массива начинаются с 0, поэтому в приведенном выше примере сценарий выводит третий аргумент.

1
27.01.2020, 23:33

По сути, вы не можете. Дело в том, что $*и $@не являются массивами ; они простые переменные . Таким образом, невозможно их проиндексировать.

Их значения — это просто строки, определенные немного по-разному. $1, $2и т. д. предоставляют доступ к отдельным компонентам.

0
27.01.2020, 23:33

Теги

Похожие вопросы