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

単一のホストに対してこれを行う場合、そのようにカラフルである必要はありません。代わりに2つの変数を使用してください。

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

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

おすすめ記事