在 bash for 循环中使用命令行参数范围打印包含参数的括号
Posted
技术标签:
【中文标题】在 bash for 循环中使用命令行参数范围打印包含参数的括号【英文标题】:Using command line argument range in bash for loop prints brackets containing the arguments 【发布时间】:2011-08-07 03:50:08 【问题描述】:这可能是一个蹩脚的问题。但是我从命令行 [ bash script ] 获得了 3 个参数。然后我尝试在 for 循环中使用这些。
for i in $1..$2
do action1
done
这似乎不起作用,如果 $1
是 "0"
并且 $2
是 2
它只打印一次 0..2' and calls
action1`。我提到了各种例子,这似乎是正确的用法。有人可以告诉我这里需要修复什么吗?
提前致谢。
【问题讨论】:
【参考方案1】:您可以使用$@:3
或$@:3:8
对输入进行切片,然后对其进行循环
例如,打印从 3 开始的参数
for i in $@:3 ; do echo $i; done
或打印从 3 开始的 8 个参数(因此,参数 3 到 10)
for i in $@:3:8 ; do echo $i; done
【讨论】:
【参考方案2】:怎么样:
for i in $(eval echo $1..$2); do echo $i; done
【讨论】:
我建议不要使用 eval 并考虑按照 Vijayender 的回答中的建议拼接参数。【参考方案3】:使用 $@ 变量?
for i in $@
do
echo $i
done
如果您只想使用第一个和第二个参数,只需
for i in $1 $2
如果您的 $1 和 $2 是整数并且您想创建一个范围,请使用 C for 循环语法 (bash)
for ((i=$1;i<=$2;i++))
do
...
done
【讨论】:
您可能只想包含答案的第二部分 - 这比使用eval
更好并且适合问题。【参考方案4】:
我遇到了类似的问题。我认为问题在于在大括号“”中取消引用 $1。以下替代方案对我有用..
#!/bin/bash
for ((i=$1;i<=$2;i++))
do
...
done
希望对您有所帮助。
【讨论】:
+1 IMO 这比在接受的答案中必须eval
更干净,但接受的答案更具体到 OP【参考方案5】:
#/bin/bash
for i
do
echo Value: $i
done
这将遍历给脚本文件的所有参数。请注意,循环变量 i 之后没有“do”或其他任何内容。
【讨论】:
【参考方案6】:for i in `seq $1 $2`; do echo $i; done
【讨论】:
【参考方案7】:我推荐这个: 在循环中,我们只处理 $1,并移位 N 次(如果接下来需要参数,那么最好保存它,因为移位删除参数):
for a in 1 2 3
do
echo $1
shift
done
示例:./test.sh "abra k" "b 2" "c 14"
abra k
b 2
c 14
【讨论】:
以上是关于在 bash for 循环中使用命令行参数范围打印包含参数的括号的主要内容,如果未能解决你的问题,请参考以下文章
[Linux Shell学习系列七]Bash循环——1for循环