Если вы не получили сообщение о том, что задание было уничтожено SLURM, а sacct показывает завершенный статус, у вас есть все основания полагать, что задание завершено.
Расширения ${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 )
скрипт:(удаляет суффикс.ssh и добавляет -SSH к каждому элементу)
array=(abc.ssh xyz.ssh ssh "q r.ssh s.ssh" "mmm.ssh^Mnnn.ssh")
for e in "${array[@]}"
do
echo ${e%.ssh}"-SSH"
done
выход:
abc-SSH
xyz-SSH
ssh-SSH
q r.ssh s-SSH
nnn-SSH
С"${array[*]}"
:
nnn-SSH xyz.ssh ssh q r.ssh s.ssh mmm.ssh
С${array[*]}
:
abc-SSH
xyz-SSH
ssh-SSH
q-SSH
r-SSH
s-SSH
nnn-SSH
Отсутствие "ммм" неудивительно:
$ printf "a^Mb"
b$ echo "a^Mb"
b
$