Bash 对于范围内的循环,上限取自用户

Bash 对于范围内的循环,上限取自用户,bash,shell,Bash,Shell,我正在尝试从用户获取for循环限制。当我传递那个变量时,它并没有遍历它 for num in {1..$totalNodes} 但是当我给出一个硬编码的值时 for num in {1..10} 它运行良好。谁能帮忙吗 这是我的密码: #!/bin/bash #!/bin/sh read -p "Enter the total no of nodes : " totalNodes read -p "Enter the no of Master nodes : " masterNodes e

我正在尝试从用户获取for循环限制。当我传递那个变量时,它并没有遍历它

for num in {1..$totalNodes}
但是当我给出一个硬编码的值时

for num in {1..10}
它运行良好。谁能帮忙吗

这是我的密码:

#!/bin/bash
#!/bin/sh
read -p "Enter the total no of nodes : " totalNodes
read -p "Enter the no of Master nodes : " masterNodes

echo $totalNodes
echo $masterNodes

for num in {1..5}
    do
        echo "$num"

        read -p "Enter the Node $num IP : " node[$num]

    done

echo $node
大括号展开的问题是它发生在其他所有事情之前,因此您期望发生的参数展开变量totalNodes的展开不会在该展开期间发生。从man bash页面可以看到

扩张

将命令行拆分为单词后,将在命令行上执行展开。执行的扩展有七种:大括号扩展、平铺扩展、参数和变量扩展、命令替换、算术扩展、分词和路径名扩展

展开顺序为:支撑展开;以从左到右的方式进行波浪线展开、参数和变量展开、算术展开和命令替换;分词;和 路径名扩展

所以你不会达到你想要达到的目标。因为您使用的是bash,所以可以使用C风格进行循环迭代,如下所示

read -p "Enter the total no of nodes : " totalNodes
for (( i=1; i<=totalNodes; i++)); do
    printf "%d\n" "$i"
done

这是我的剧本:/宾至如归/bin/sh read-p输入节点总数:totalNodes read-p输入主节点数:masterNodes echo$totalNodes echo$masterNodes for num in{1..5}do echo$num read-p输入节点$num IP:Node[$num]done echo$Node这可能不是显式的重复,OP的逻辑正确,这正是支架扩展的问题,这是问题的核心。这很有效,非常感谢。