У @Kusalananda есть лучший ответ для последних версий bash. Для более ранних версий вы можете использовать косвенную переменную:
for a in ${array_names[@]}; do
tmp="${a}[@]"
for b in "${!tmp}"; do echo "$b"; done # or: printf "%s\n" "${!tmp}"
done
См. 4-й абзацhttps://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
Спецификации POSIX дляdd
не указывают максимум в явном виде, но есть некоторые ограничения:
size_t
, так как это тип количества байтов для чтения, заданных функции read
; read
также указан как пределSSIZE_MAX
; read
в любом случае передает только до 2 147 479 552 байт . На 64-битной -платформе size_t
имеет длину 64 бита; кроме того, он беззнаковый, поэтому dd
не будет работать, если заданы значения больше 2 64 – 1:
$ dd if=/dev/zero of=/dev/null bs=18446744073709551616
dd: invalid number: ‘18446744073709551616’
В Linux на 64 -бит x86, SSIZE_MAX
равно 0x7fffffffffffffffL (запустите echo SSIZE_MAX | gcc -include limits.h -E -
, чтобы проверить ), и это предел ввода:
$ dd if=/dev/zero of=/dev/null bs=9223372036854775808
dd: invalid number: ‘9223372036854775808’: Value too large for defined data type
$ dd if=/dev/zero of=/dev/null bs=9223372036854775807
dd: memory exhausted by input buffer of size 9223372036854775807 bytes (8.0 EiB)
Как только вы найдете приемлемое значение, следующим ограничением будет объем памяти, который может быть выделен, поскольку dd
необходимо выделить буфер, прежде чем он сможет прочитать его.
Как только вы найдете значение, которое может быть выделено, вы достигнете предела read
(в Linux и других системах с аналогичными ограничениями ), , если вы не используете GNU dd
и укажитеiflag=fullblock
:
$ dd if=/dev/zero of=ddtest bs=4294967296 count=1
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 38.3037 s, 56.1 MB/s
(dd
скопировал чуть меньше 2 31 байт, т. е. ограничение Linux, упомянутое выше, даже не половину того, что я просил ).
Как объяснялось в ответах на вопросы по ссылке выше, вам потребуется fullblock
для надежного копирования всех входных данных в любом случае для любого значения bs
больше 1.