私は奇妙な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 )
または(bash
4.2以降の場合)lastpipe
シェルオプションを使用してください。
shopt -s lastpipe
( echo a; echo b; echo c ) | readarray -t arr
2番目の方法は、デフォルトではlastpipe
対話型セッションでは機能しません。この場合は、まず実行してみてください。
set +m
「モニターモード」を無効にします。