Расширения ${var#word}
и ${var%word}
также работают с массивами:
arr=(/dir/dir1/foo.ssh /dir/dir2/bar.ssh )
arr2=("${arr[@]##*/}")
arr2=("${arr2[@]%.ssh}")
printf "%s\n" "${arr2[@]}"
печатает foo
и bar
.
Затем эта командная подстановка ls | xargs
не работает с именами файлов, содержащими пробелы (даже безxargs
)или кавычек (из-заxargs
).
На самом деле вы можете расширить glob из переменной, только не заключайте ее в кавычки. Вот так:
array=( $1 )
(Хотя IFS
по-прежнему имеет значение, поэтому шаблоны с пробелами будут ломаться, если сначала не установить его на пустую строку.)
Хотя, если вы просто ищете файлы с именами, оканчивающимися на .ssh
, вы можете просто передать каталог в качестве аргумента и подстановку для *.ssh
в скрипте:
array=( "$1"/*.ssh )