bash 将变量设置为命令输出

bash 将变量设置为命令输出

尝试 bash shell 脚本并遇到小问题:

# 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一下。

看起来您想使用以主机名命名的变量。不幸的是,主机名以数字开头,因此它不能用作变量的名称。

该命令echo $7phdsn01输出phdsn01因为$7(第 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"

相关内容