Используйте for
цикл в сочетании с расширением параметров:
for f in *.jpg; do cwebp "$f" -o "${f%.jpg}.webp"; done
См. также LESS='+/Parameter Expansion' man bash
, чтобы прочитать об этом для Bash.
Однако, Расширение параметров определено в POSIX; оно не специфично для Bash. (Хотя у Bash могут быть некоторые расширения.) Приведенная выше команда будет работать на любой системе POSIX.
Вариант @ NarūnasK's
readarray() {
local i=0
unset -v "$1"
while IFS= read -r "$1[i++]"; do :; done
eval "[[ \${$1[--i]} ]]" || unset "$1[i]"
}
Пример:
$ readarray a < <(seq 10)
$ printf '%s\n' "${a[2]}"
3
Потенциально вы можете заменить его простым циклом while
:
function map_my_array()
{
my_file=$1
local i=0
while IFS='' read -r line || [[ -n "${line}" ]]; do
my_array[((i++))]="${line}"
done < "${my_file}"
}
fpath="$HOME/tst.sh"
echo 'cat /etc/passwd' > "${fpath}"
chmod +x "${fpath}"
map_my_array <("${fpath}")
echo "${my_array[3]}"