Я не понимаю, почему вы хотите использовать $ @ (каждый параметр), но я бы решил вашу проблему следующим образом:
#!/bin/bash
ARR=($(find . -type f -exec file {} + | grep script | sed -r 's/([^:]*).*/\1/'))
for i in ${ARR[@]}; do
if [ -x $i ]; then
echo "$i is an executable script"
fi
done
Найти каждый файл (включая двоичные файлы), отфильтровать сценарии оболочки с помощью grep и взять только имя файла с помощью sed:
find . -type f -exec file {} + | grep script | sed -r 's/([^:]*).*/\1/')
Вы можете перебирать элементы массива, используя индекс "@". Есть еще несколько других, которые могут быть полезны в будущем:
for i in ${ARR[@]}; do
#code
done
Наконец, проверьте, исполняется ли скрипт с параметром -x из [
if [ -x $i ]; then
#do something
fi
p.s. не vim лучше чем emacs? ; -)