переместить вывод подоболочки в массив в bash 3

Используйте for цикл в сочетании с расширением параметров:

for f in *.jpg; do cwebp "$f" -o "${f%.jpg}.webp"; done

См. также LESS='+/Parameter Expansion' man bash, чтобы прочитать об этом для Bash.

Однако, Расширение параметров определено в POSIX; оно не специфично для Bash. (Хотя у Bash могут быть некоторые расширения.) Приведенная выше команда будет работать на любой системе POSIX.

1
23.12.2016, 01:40
2 ответа

Вариант @ 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
1
27.01.2020, 23:34

Потенциально вы можете заменить его простым циклом 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]}"
1
27.01.2020, 23:34

Теги

Похожие вопросы