출력을 얻고 싶습니다.
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