Сборка массива из вывода awk - PullRequest
0 голосов
/ 23 декабря 2019

Может кто-нибудь объяснить, почему следующее не работает, пожалуйста?

список

the letter is d
the number is 4
the number is 2
the letter is g

script.sh

#!/bin/bash

cat "$1" | grep letter | array=($(awk '{print $4}'))

for i in "${array[@]}"
do
  :
  echo $i
done

Если я запусту это bash script.sh listЯ ожидаю, что массив будет печатать d и g, но это не так. Я думаю, это из-за того, как я пытаюсь установить массив.

1 Ответ

2 голосов
/ 23 декабря 2019

Я думаю, это из-за того, как я пытаюсь установить массив.

Каждая команда в конвейере | запускается в подоболочке - как отдельный процесс. Родительский процесс не «видит» изменения переменных из дочернего процесса.

Просто:

array=($(grep letter "$1" | awk '{print $4}'))

или

array=($(awk '/letter/{print $4}' "$1"))

Запуск присваивания переменной в родительской оболочке.

...