readarray(またはパイプ)の問題

readarray(またはパイプ)の問題

私は奇妙なreadarray命令を続けました。

私たちman bashを:

readarray
     Read lines from the standard input into the indexed array variable array

ただし、次のスクリプトは機能しません(配列が空です)。

unset arr; (echo a; echo b; echo c) | readarray arr; echo ${#arr[@]}
unset arr; cat /etc/passwd | readarray arr;  echo ${#arr[@]}

これらのタスクは次のとおりです。

unset arr; readarray arr < /etc/passwd ;  echo ${#arr[@]}
unset arr; mkfifo /tmp/fifo; (echo a; echo b; echo c) > /tmp/fifo & mapfile arr < /tmp/fifo ; echo ${#arr[@]}

水道管に何の問題がありますか?

ベストアンサー1

現在のシェルでコマンドを実行するには、readarrayパイプの代わりにプロセス置換を使用します。

readarray -t arr < <( echo a; echo b; echo c )

または(bash4.2以降の場合)lastpipeシェルオプションを使用してください。

shopt -s lastpipe
( echo a; echo b; echo c ) | readarray -t arr

2番目の方法は、デフォルトではlastpipe対話型セッションでは機能しません。この場合は、まず実行してみてください。

set +m

「モニターモード」を無効にします。

おすすめ記事