"쉘 친화적인" 출력 구문 분석

"쉘 친화적인" 출력 구문 분석

출력을 얻고 싶습니다.

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

관련 정보