显示 shell 脚本的额外括号



我是shell脚本的初学者

echo $ip  "node$i" >> /etc/hosts

在外壳中编写上述内容会导致

192.168.1.2 {
192.168.1.4 node2
192.168.1.2 }

我不想要{和}.我该怎么办?

完整的程序

read total 
number=virsh list --all |  wc -l
$number=$number+1
for i in {$number $total }
do 
virt-clone --connect=qemu:///system -o vm2 -n vm$i -f /vm$i.qcow2
ip=$(arp -an |grep "virbr0" |egrep -Eo '[[:digit:]]{1,3}.[[:digit:]]{1,3}. [[:digit:]]   {1,3}.[[:digit:]]{1,3}'|tail --lines=1)
echo $ip  "node$i" >> /etc/hosts
done

我正在尝试克隆虚拟机并更改主机文件中的条目

你的语法是错误的。假设number=1total=3.然后

for i in {$number $total }
do 

将迭代三次。变量i将依次设置为值

  • {1
  • 3
  • }

看起来您正在尝试使用大括号扩展将i设置为 1,然后是 2,然后是 3。您可能一直在尝试使用

for i in {$number..$total}
do

但这也行不通,因为在bash中,支撑展开发生在参数展开之前。(请注意,这在zsh中是有效的,因为它的评估过程更复杂。对于由变量定义的范围,您需要使用 seq 命令

for i in $(seq $number $total)
do

或 C 型循环

for (( i=$number; i<=$total; i++ ))
do

for遍历所有单词,例如:

for i in {1 3 }; do echo $i; done
{1
3
}

所以它永远不会起作用。使用其他方法进行循环,例如 seq 1 3 .

最新更新