Каков правильный синтаксис для переменной цикла for в PATH?

Правило «пары» 1 -4 и 2 -3, которые вы отметили, скорее всего, не являются дубликатами, но вы не видите различий в выводе команды, которую вы использовали. если вы используете iptables -L -vвы получите дополнительные выходные данные, которые могут показать различия -это обычно происходит (по моему опыту ), когда правила работают на разных интерфейсах.

dpt:domainи dpt:bootps— это разные спецификации порта назначения. dpt:domain— это порт назначения 53 (домен или DNS ), а dpt:bootps— порт назначения 67 (DHCP ).

Редактировать :вы правы, эта ситуация не имеет прямого отношения к Docker. Это относительно распространенная ситуация, которая была раскрыта Docker в вашей среде, но так же часто возникает за пределами среды Docker.

-1
22.07.2019, 22:08
1 ответ

Предполагая, что вы используете оболочку bash, похоже, что вы хотите использовать массив:

root[1]=path/to/root1
root[2]=path/to/root2

for i in {1..2}; do
    printf '%s\n' "${root[i]}"
done

или запишите присваивание rootкак присваивание одного массива (обратите внимание, что первый индекс равен 0 в массиве bash, если не используются явные индексы ),

root=( path/to/root1 path/to/root2 )

for i in {0..1}; do
    printf '%s\n' "${root[i]}"
done

и/или перебирать значения массива (, а не его индексы ),

root=( path/to/root1 path/to/root2 )

for i in "${root[@]}"; do
    printf '%s\n' "$i"
done

(чтобы просто вывести массив, цикл не нужен, printf '%s\n' "${root[@]}"достаточно будет печатать значения массива на отдельных строках)


В общем, вы можете не знать, какие индексы используются массивом (массив может иметь прерывистые индексы ), поэтому для перебора доступных индексов вы должны перебрать"${!root[@]}":

root=( path/to/root1 path/to/root2 )

for i in "${!root[@]}"; do
    printf '%s\n' "${root[$i]}"
done
0
28.01.2020, 05:12

Теги

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