Убедитесь, что у вас установлены некоторые пакеты:
sudo apt-get install ntfsprogs ntfs-config
Если они у вас есть, но они по-прежнему не работают, попробуйте следующее:
sudo apt-get install ntfs-3g
Кажется, это работает:
for ((i=1;i<=3;i++)); do
eval echo "$"$(eval echo Var${i}Value)
done
Там где-то шутят, что это ужасно eval
...
Использовать ссылку на имя . Они работают как указатели на другие переменные (в 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
См. также:
Можно использовать цикл for, если известны переменные:
Пример:
#!/bin/bash
for i in var1 var2 var3
do
echo " This is $i"
#More commands.
done
выход
This is var1
This is var2
This is var3
Чтобы проверить, установлена ли переменная, см. Как проверить, существует ли переменная в операторе 'if'?([ -v "Var${i}Value" ]
(ksh
/ zsh
/bash
)илиeval "[ -n \"\${Var${i}Value+set}\" ]"
(POSIX )).
Теперь, чтобы перебрать переменные, имена которых соответствуют шаблону, в zsh
вы можете выполнить:
for varname in ${(Mk)parameters:#Var<->Value}; do
something with "$varname" and its value: "${(P)varname}"
done
Чтобы обработать их в числовом порядке, добавьте флаг раскрытия параметра n
(и измените Mk
наMkn
).
Сbash
:
readarray -t list < <(compgen -v | grep -xE 'Var[[:digit:]]+Value')
for varname in "${list[@]}"; do
something with "$varname" and its value: "${!varname}"
done
Или заменить readarray
на split+glob, чтобы избежать использования массива:
IFS=$'\n' # split on newline
for varname in $(compgen -v | grep -xE 'Var[[:digit:]]+Value'); do
something with "$varname" and its value: "${!varname}"
done
Чтобы обработать их в числовом порядке и предполагая, что ваш sort
является GNU sort
, направьте вывод grep
в sort -V
.