参数在bash脚本中传递给for循环

Mil*_*dek 23 bash loops command-line-arguments

我试图将参数作为for循环的最大限制传递,如下所示:

#!/bin/bash

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

然而,这{1..2}在使用参数调用时返回2,而不是执行脚本并给我

1
2
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 36

变量替换不是在花括号内完成的.您可以使用固定数字而不是变量.

支持扩张

序列表达式采用{x..y}形式,其中x和y是整数或单个字符....

在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符.这是严格的文字.Bash不对扩展的上下文或大括号之间的文本应用任何语法解释.

正确形成的大括号扩展必须包含不带引号的开括号和右大括号,以及至少一个不带引号的逗号或有效的序列表达式.任何不正确形成的支撑扩展都保持不变.

尝试以下替代方案之一:

for ((i = 1; i <= $1; i++)); do
    echo $i
done

# Not recommended with large sequences.
for i in $(seq 1 $1); do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)


小智 7

这将循环通过所有真正的参数(又名"testo mesto"是一个参数)

#cycle through all args
for (( i=1; i<=$1; i++ )); do
    eval arg=\$$i
    echo "$arg"
done
Run Code Online (Sandbox Code Playgroud)

要么

#cycle through all args
for (( i=1; i<=$1; i++ )); do
    echo "${!i}"
done
Run Code Online (Sandbox Code Playgroud)