Использовать ссылку на имя . Они работают как указатели на другие переменные (в Bash 4.3 и более поздних версиях ):
.
Var1Value=A
Var2Value=B
Var3Value=C
Var4Value=""
for (( i=1 ; ; i++ )); do
n="Var${i}Value" # the name of var
declare -n p="$n" # reference to the var
[ "${p+x}" ] || break # see if it exists
echo "$n: '$p'"
done
"${p+x}"
оценивается как x
, если переменная, на которую указывает p
, существует, так что это относится и к установленным, но пустым переменным.
В качестве альтернативы используйте косвенное расширение переменной ${!n}
, которое ссылается на переменную, названную n
.
for (( i=1 ; ; i++ )); do
n="Var${i}Value" # the name of var
[ "${!n+x}" ] || break # see if it exists
echo "$n: '${!n}'"
done
Но на самом деле вам следует использовать массив. Ни один из трех вариантов здесь не является стандартным, но массивы, безусловно, являются наиболее логичными.
VarValue=( A B C )
for value in "${VarValue[@]}"; do
# use "$value" here
printf 'Value is "%s"\n' "$value"
done
См. также:
Когда вы запускаете такую команду, как ping foobar
, система должна решить, как преобразовать foobar
в IP-адрес.
Обычно первое место, которое он ищет, это /etc/nsswitch.conf
.
Здесь может быть такая строка, как:
hosts: files dns mdns4
Это указывает подпрограмме поиска сначала искать в «файлах», то есть /etc/hosts
. Если это не находит совпадения, он попытается выполнить поиск DNS. И если мы все еще не знаем ответа, он попытается выполнить поиск mDNS.
Поиск DNS — это место, где система затем ищет /etc/resolv.conf
. Это говорит ему, на какие DNS-серверы смотреть. На моих машинах это авто -настроено DHCP.
% cat /etc/resolv.conf
# Generated by NetworkManager
search mydomain
nameserver 10.0.0.1
nameserver 10.0.0.10
Способ сборкиresolv.conf
может меняться в зависимости от операционной системы, имеющихся у вас дополнительных компонентов, других записей конфигурации, последовательности загрузки... В вашем случае в Ubuntu вы запускаете программы systemd, которые настраивают это файл, чтобы указать на ваши локальные systemd-resolved
и , которые будут знать, как общаться с реальными DNS-серверами.
На моих основных серверах со статическими IP-адресами и без systemd-resolved
я редактирую этот файл вручную.
Наконец, mdns4
сообщает подпрограммам, что нужно попытаться спросить avahi-daemon
, знает ли она имя.
Вы можете изменить правила. например, если /etc/nsswitch.conf
только что сказал:
hosts: files
затем только используется локальный /etc/hosts
файл.
Возможны другие записи; например, ldap
заставит его искать LDAP.