正しく理解した場合、出力のデフォルトの区切り記号は次awk
のとおりです。スペース。
ただし、次のスクリプトは期待どおりに機能しません。次の出力をawk
配列に解析できません。
#!/bin/bash
echo "------ with input string from awk ------"
ALL_TTY_OWNERS_STR=$(ls -l /dev | grep tty | awk '{print $3}')
read -r -a ALL_TTY_OWNERS_ARRAY <<< "$ALL_TTY_OWNERS_STR"
echo "${#ALL_TTY_OWNERS_ARRAY[@]}" # This says 1
echo "${ALL_TTY_OWNERS_ARRAY[0]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[1]}" # empty string, expected "root"
echo "${ALL_TTY_OWNERS_ARRAY[2]}" # empty string, expected "root"
echo "------ with my manually created input string ------"
ALL_TTY_OWNERS_STR="root root root" # only for testing
read -r -a ALL_TTY_OWNERS_ARRAY <<< "$ALL_TTY_OWNERS_STR"
echo "${#ALL_TTY_OWNERS_ARRAY[@]}" # 3, as expected
echo "${ALL_TTY_OWNERS_ARRAY[0]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[1]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[2]}" # "root", as expected
withの出力を期待どおりに解析できないのはなぜですかawk
?read
ベストアンサー1
それについて大地スプリッタ。
あなたは定義する必要があります記録区切り文字は、各文字列を単一の文字列に入れます。使用ORS
パラメータ:
ls -l /dev | grep tty | awk 'BEGIN { ORS=" " }; {print $3}'
それがなければ、出力は次のようになります。
root
root
root
etc...
ALL_TTY_OWNERS_STR
変数を定義するときただ最初に入れてください。配列の最初の要素の出力文字列です。したがって、あなたの配列には1つの要素しか含まれません。これはまさにあなたが得るものです。