Чтобы избежать медленного кода, который открывает ненужные экземпляры bash с помощью $ (команда) или command
, вы можете использовать расширение скобки.
Чтобы повторить имя файла 3 раза, выполните:
file="image.png"; convert "${file[0]"{1..3}"}" many_images.png
или более противоречивая версия, которая использует переменную для указания количества повторяющихся имен файлов:
n=10; file="image.png"; eval convert \"\${file[0]\"{1..$n}\"}\" many_images.png
Как это работает.
$ {file [0]} совпадает с $ file или$ {file}
Bash сначала выполняет расширение фигурной скобки, поэтому он создает последовательность, подобную этой:
${file[0]1} ${file[0]2} ${file[0]3}
Bash, пожалуйста, игнорируйте эти дополнительные числа, чтобы вы получили
${file[0]} ${file[0]} ${file[0]}
Что упрощает до
${file} ${file} ${file}
, а затем
$file $file $file
Что мы и хотим.