解析“shell 友好”输出

解析“shell 友好”输出

我想得到输出

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 等操作。

这两者看起来都很奇怪。有没有更好的办法?有什么方法可以一举完成吗?

答案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

相关内容