Заменить каждый буквенный символ буквойN
:
tr '[:alpha:]' N < file.txt > file2.txt
mapfile
считывает весь стандартный ввод в массив, поэтому вы не можете использовать стандартный вывод функции для отображения сообщений типа «Статус».
Попробуйте сделать так:
$ cat map.sh
#!/bin/bash
exec 3>&1
SomeFunction(){
printf "%s\n" {0..3}
echo "Status" >&3
}
mapfile -t SomeArray < <(SomeFunction)
declare -p SomeArray
Пояснение:
Во-первых, сценарий дублирует свой стандартный вывод в &3
.
Когда выполняется mapfile
, он считывает стандартный ввод из стандартного вывода подстановки процесса.
&3
не затрагивается подстановкой процесса, поэтому он по-прежнему доступен в функции и по-прежнему ссылается на исходный стандартный вывод сценария (, например. ваш tty или куда-либо вывод сценария был перенаправлен на ), а не на перенаправление.
SomeFunction
выводит сообщение о состоянии в &3, а не в (перенаправленный )стандартный вывод.
Выход:
$./map.sh
Status
declare -a SomeArray=([0]="0" [1]="1" [2]="2" [3]="3")
Кстати, если вы хотите сделать что-то более интересное с "&3", чем просто вывести его на стандартный вывод, вам нужно будет оператор exec
перенаправить его в файл или именованный канал. или что-то.
Попробуйте выполнить одно из следующих действий, например, и вы обнаружите, что не можете перенаправить &3
. Слишком поздно, он уже ушел в исходный стандартный вывод сценария :
mapfile -t SomeArray < <(SomeFunction) > /dev/null
mapfile -t SomeArray < <(SomeFunction) 3> /dev/null