ちょっとした問題に悩まされています。出力をawkにパイプするコマンドがありますが、配列の出力を1つずつキャプチャしたいと思います。
私の例:
myarr=$(ps -u kdride | awk '{ print $1 }')
しかし、それはすべての出力をコンマで区切られた1つの巨大な文字列にキャプチャします。
output: PID 3856 5339 6483 10448 15313 15314 15315 15316 22348 29589 29593 32657 1
私も次のことを試しました:
IFS=","
myarr=$(ps -u kdride | awk '{ print $1"," }')
But the output is: PID, 3856, 5339, 6483, 10448, 15293, 15294, 15295, 15296, 22348, 29589, 29593, 32657,
1
各pidを独自の配列要素にキャプチャできるようにしたいと思います。設定IFS = '\n'
は何もせず、元の出力を保持します。この作業を行うには、どのような変更が必要ですか?
次のように追加の括弧を追加します。
myarr=($(ps -u kdride | awk '{ print $1 }'))
# Now access elements of an array (change "1" to whatever you want)
echo ${myarr[1]}
# Or loop through every element in the array
for i in "${myarr[@]}"
do
:
echo $i
done
bash
—配列 も参照してください。
Bashのビルトイン mapfile (またはその同義語readarray
)を使用します
mapfile -t -s 1 myarr < <(ps -u myusername | awk '{print $1}')
少なくともGNU/Linuxでは、ps
の出力をフォーマットできるため、awk
および-s 1
は不要です。
mapfile -t myarr < <(ps -u myusername -o pid=)