実行時に私がbash配列に格納したい数値のセットを返すコマンドがあります。bash配列にコマンド戻り値を格納する方法
[email protected]:~/trash$ xdotool search brain
Defaulting to search window name, class, and classname
52428804
50331651
62914564
65011896
48234499
これらの値をアレイに保存するにはどうすればよいですか?
実行時に私がbash配列に格納したい数値のセットを返すコマンドがあります。bash配列にコマンド戻り値を格納する方法
[email protected]:~/trash$ xdotool search brain
Defaulting to search window name, class, and classname
52428804
50331651
62914564
65011896
48234499
これらの値をアレイに保存するにはどうすればよいですか?
:
mapfile -t array < <(xdotool search brain)
:
array=($(xdotool search brain))
出力は、(例えば、ラインがそれらにスペースを持っているかもしれません)もっと複雑だったら、あなたは、bashの組み込みmapfile
を使用することができますが(詳細はhelp mapfile
)
expects入力を別のコマンドで書き込んで、その入力を配列に入れることができます。したがって、最初のコマンドの出力をtoArray
コマンドにパイプします。次に、toArray
出力で必要な作業を行います。この単純なケースで
declare -a myarr # declare an array
myarr=($(grep -v "Defaulting" $(xdotool search brain) | awk '{printf $1" "}')) # Fill the array with all the numbers from the command line
echo ${myarr[*]} # echo all the elements of the array
または
echo ${myarr[1]} # First element of the array
'grep -v'は無害ですが不要です。その行は' stdout'ではなく 'stderr'に送られます。あなたはCでそれをしてはならないのと同じ理由で 'print'を意味するときawkで' printf'を使うべきではありません:文字列にパーセントがあるかもしれません。 – rici
この回答は非常にうまく機能します、ありがとう! – dmohr