bash는 변수를 명령 출력으로 설정합니다.

bash는 변수를 명령 출력으로 설정합니다.

bash 쉘 스크립트를 시도했는데 작은 문제가 발생했습니다.

# hostname --short
7phdsn01
# virsh --readonly list --state-running --name
Nagios

# set $(hostname --short)=$(virsh --readonly list --state-running --name)
# echo $?
0
# echo $7phdsn01
phdsn01
# 

조언해주세요.


# unset $7phdsn01
# set $(hostname --short)=$(virsh --readonly list --state-running --name)
# echo $7phdsn01
phdsn01
# 

답변1

set명령은 처럼 작동하지 않습니다 bash. 시도해 볼 수도 있습니다 declare.

호스트 이름을 따서 명명된 변수를 사용하려는 것 같습니다. 아쉽게도 호스트 이름은 숫자로 시작하므로 변수 이름으로 사용할 수 없습니다.

(7번째 위치 인수)가 설정되지 않고 null로 확장되고 나머지 문자열이 뒤따르기 때문에 명령이 echo $7phdsn01출력됩니다 .phdsn01$7

내가 사용할 수도

declare -A state

state["$(hostname --short)"]=$(virsh --readonly list --state-running --name)

그러면 이름이 붙은 연관 배열이 생성됩니다 state. 다음 줄에서는 명령에 의해 제공된 키 값을 hostname --state명령의 출력으로 설정합니다 virsh.

배열의 값과 키는 state다음과 같습니다.

for host in "${!state[@]}"; do
    printf 'Host %s is in state %s\n' "$host" "${state[$host]}"
done

단일 호스트에 대해 이 작업을 수행하는 경우 그렇게 화려할 필요는 없습니다. 대신 두 가지 변수를 사용하세요.

host=$(hostname --short)
state=$(virsh --readonly list --state-running --name)

printf 'Host %s is in state %s\n' "$host" "$state"

관련 정보