「シェルに優しい」出力の解析

「シェルに優しい」出力の解析

出力を得たいです。

xdotool getactivewindow getwindowgeometry --shell

Bashのローカル変数。

私は次のようにできると思います。

declare -A wp=( $(xdotool getactivewindow getwindowgeometry --shell | \
sed 's/\(^[^=]*\)/[\1]/') )

# sub gives:

# [WINDOW]=48926121
# [X]=366
# [Y]=96
# [WIDTH]=819
# [HEIGHT]=1022
# [SCREEN]=0

しかし、これは失敗しました。

連想配列を割り当てるときは、添字を使用する必要があります。

別のアプローチは、すべての既知の出力と使用値をローカルに宣言することですeval。より安全なアプローチは、各値に対してgrep、sedなどを6回実行することです。

どちらも奇妙に見えますね。もっと良い方法がありますか?一度にできる方法はありませんか?

ベストアンサー1

ループベースのソリューションが許可されている場合は、次のことができます。

declare -A wp
while IFS='=' read -r name value; do 
  wp+=([$name]=$value)
done < <(xdotool getactivewindow getwindowgeometry --shell)

前任者。

$ declare -A wp
$ while IFS='=' read -r name value; do 
    wp+=([$name]=$value)
  done < <(xdotool getactivewindow getwindowgeometry --shell)

$ for name in "${!wp[@]}"; do 
    printf 'Value of %s is %s\n' "$name" "${wp[$name]}"
  done
Value of WINDOW is 81788935
Value of WIDTH is 1440
Value of SCREEN is 0
Value of X is 0
Value of HEIGHT is 866
Value of Y is 34

おすすめ記事