Я с подозрением относился бы к Вашей версии Bash для запуска. Я нахожусь на этой версии, и я могу установить массивы очень хорошо.
$ bash --version
GNU bash, version 4.2.45(1)-release (x86_64-redhat-linux-gnu)
$ array[0]=0
$ array[1]=1
$ array[2]=2
Можно затем вспомнить их индивидуально:
$ echo ${array[0]}
0
$ echo ${array[1]}
1
$ echo ${array[2]}
2
Или как список:
$ echo "${array[@]}"
0 1 2
Вы не можете только назвать массив как другую переменную:
$ echo $array
0
Я полагаю, что это, возможно, было тем, что вводило в заблуждение Вас в размышление, что это не работало правильно. Также установка элемента массива со значением другой переменной также работает.
$ newval=3
$ array[2]=$newval
$ echo "${array[@]}"
0 1 3
Вы могли также использовать printf
здесь, выполнение так покажет Вам, почему Вы хотите заключить результаты в кавычки ${array[@]}
. Но сначала давайте добавим строку к массиву:
$ array[0]="a string"
Без кавычек:
$ printf "%s\n" ${array[@]}
a
string
1
3
С кавычками:
$ printf "%s\n" "${array[@]}"
a string
1
3
Хорошо у Вас есть 2 тактики, которую можно использовать в Bash. Можно просто установить переменные так, чтобы они были глобально ограничены по объему. Это часто - техника, которую использует большинство людей.
Другой метод включает передачу значением, значениями к функциям в Bash. Я покажу основную функцию, куда я передаю ее 2 значения.
$ function hello() {
printf "I got arg1: %d and arg2: %d\n" $1 $2
}
Теперь, когда я выполняю его с различными аргументами:
$ hello 1 2
I got arg1: 1 and arg2: 2
$ hello 3 4
I got arg1: 3 and arg2: 4
$ hello 3 blah
bash: printf: blah: invalid number
I got arg1: 3 and arg2: 0
Можно читать больше о массивах и функциях в Bash здесь для получения лучшего понимания технологий.
Оказывается, проблема в том, что systemd игнорирует все, что находится внутри /dev/block
.
/dev/block/ec2/ephemeral0
была симлинк, созданный правилом udev, поэтому решение проблемы заключается в том, чтобы просто настроить правило udev и поместить симлинк куда-нибудь еще. Я решил поместить его в /dev/disk/ec2/ephemeral0
вместо этого.
$ udevadm info -q symlink -n /dev/xvdb
disk/by-uuid/ae145d53-9501-419f-b9b1-7416e5c4fec9 disk/ec2/ephemeral0
$ systemctl list-units -a | grep 'xvdb\|ephemeral0'
dev-disk-ec2-ephemeral0.device loaded active plugged /dev/disk/ec2/ephemeral0
dev-xvdb.device loaded active plugged /dev/xvdb
sys-devices-vbd\x2d2064-block-xvdb.device loaded active plugged /sys/devices/vbd-2064/block/xvdb
Source: http://lists.freedesktop.org/archives/systemd-devel/2014-August/021919.html