эти строки кода работают со всем что нашли разом непредоставляя програмисту возможности работать с тем что было найдено в циклах, а только путем удленения нагромождения этих сток.
Конечно это может звучать бредово, и бредом быть и вовсе, но мне понятной когда есть возможность обрабатывать каждое найденое имя файла в отдельности, вот только для этого и нужны наверно такие ухирщения.
В идеале былоб класно еслиб можно было обращаться в найденому имени файла как к массиву символов и сравнить (в условии данной задачи) последний символ файла с ~. Я сомневаюс что такое можно в баше

вы конечно можете сказать что bash не для этого создавали, но лучьше тогда проста промолчать.
напомню с чего все начиналось
#!/bin/bash
for filename in $(ls) ; do
if [[ смотрим что последний символ в $filename = "~" ]]
then
echo "резервный файл: $filename"
fi
done
PS. мне не результат важен, а процес обучения