在bash for循环中使用命令行参数范围打印包含参数的括号

ru4*_*514 55 bash command-line arguments loops for-loop

这可能是一个蹩脚的问题.但我从命令行[bash script]得到3个参数.然后我试图在for循环中使用它们.

for i in {$1..$2}
    do action1
done
Run Code Online (Sandbox Code Playgroud)

这似乎并没有工作,虽然,如果$1"0"$22它打印{0..2}' and callsaction1`只有一次.我提到了各种例子,这似乎是正确的用法.有人可以告诉我这里需要修复什么吗?

提前致谢.

Vij*_*der 72

您可以使用${@:3}或切片输入${@:3:8},然后循环它

例如,打印从3开始的参数

for i in ${@:3} ; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

或者从3开始打印8个参数(因此,参数3到10)

for i in ${@:3:8} ; do echo $i; done
Run Code Online (Sandbox Code Playgroud)


zxt*_*zxt 64

怎么样:

for i in $(eval echo {$1..$2}); do echo $i; done
Run Code Online (Sandbox Code Playgroud)


kur*_*umi 17

使用$ @变量?

for i in $@
do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

如果你只是想使用第一个和第二个参数,那么

for i in $1 $2 
Run Code Online (Sandbox Code Playgroud)

如果您的$ 1和$ 2是整数并且您想要创建范围,请使用C for循环语法(bash)

for ((i=$1;i<=$2;i++))
do
...
done
Run Code Online (Sandbox Code Playgroud)

  • 您可能只希望包含答案的第二部分 - 这比使用`eval`更适合问题. (2认同)

小智 8

我遇到了类似的问题.我认为问题是在大括号'{}'内取消引用$ 1.以下替代方案对我有用..

#!/bin/bash
for ((i=$1;i<=$2;i++))
do
   ...
done
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.