3 回答

TA贡献2039条经验 获得超7个赞
解决办法不能在序列大括号表达式中使用变量:
如果目的仅仅是 在范围内迭代数-就像OP的案子- 最佳选择是 不 使用支撑展开 ,而是使用bash的 C型回路-见 用户000001的答案 .如果特定的数字并不重要,并且只需要执行一个指定次数的循环体, 是个选择。 如果使用支撑展开 是尽管如此: 使用 seq
效用与ITS -f
提供一个 printf
-样式格式字符串(如上面用于零填充),或基于 eval
(需要额外的照顾!)或者建造一个 列阵
在循环中,所有这些都在 这个答案 .您还可以考虑一般地实现该功能,例如编写自定义shell函数或使用实用程序(如 awk
或 perl
.echo $(seq 3)
->1 2 3
;起始号码 1
默示echo $(seq 2 4)
->2 3 4
;显式起始数和结束号 echo $(seq 1 2 5)
->1 3 5
;自定义增量( 2
在 中间)
echo $(seq -f '%02.f' 3)
->01 02 03
-零垫 如果你 不需要列表中的数字具有 前缀或后缀 ,使用 seq
的实用程序。 未报价命令替换( 小警告:seq
不是POSIX实用程序,但它广泛可用)。 如果你 确实需要列表中的数字才有 前缀或后缀 ,你有几种选择:
安全使用的例子 eval
对于驱动序列大括号表达式的变量:
from=1 to=3 # sample values# Ensure that $from and $to are decimal numbers and abort, if they are not.(( 10#$from + 10#$to || 1 )) 2>/dev/null || { echo "Need decimal integers" >&2; exit 1; }eval echo "A{$from..$to}" # -> 'A1 A2 A3'
支撑展开概述
a
固定级数 (列表)以逗号分隔的字符串 -变量 支撑 指定并展开为 固定 令牌数 (2或更多);例如: echo A{b,c,d}
->Ab Ac Ad
,即由args的数目所暗示的3个令牌。 echo {/,$HOME/}Library
例如-> /Library /User/jdoe/Library
变量引用-甚至全局- 是
支持,但请注意,它们会被扩展。 后
支撑扩张 结果
,在正常评价过程中。 a
序列 表达式(范围)与 ..
,典型 数值化 -变量 不支持 [稀有] 弦
*只有 单一英文字母
允许的;允许的 {a..c}
数字: 仅十进制整数
;例如, {1..10}
,{10..1}
,{-1..2}
Bash 4+
增加了两个特性: 相比之下, 使用变量 是吗? 在 zsh
和 ksh
.使用前缀和后缀的示例: A{1..3}#
->A1# A2# A3#
坏的
例举 变量:
{$from..$to} # !! FAILS
-$from
和 $to
被解释为 文字
因此不能被识别为一个字母或一个十进制整数- 不
支撑展开是执行(见下文)。 echo A{001..003}
->A001 A002 A003
echo A{1..5..2}
->A1 A3 A5
-增加2的数字 任选 增量步长值:
有能力 零垫:
扩展为 变量 令牌数 ,由 文字 起点和终点 (为 历史原因, 不支持使用变量
-见 阿 无效 支撑表达 是 不 扩大 (处理为常规的未引号字符串,与 {
和 }
作为 文字):这允许使用未引用的 {}
带着 find
例如。 echo {}
->'{}'
-作为支柱费用无效:至少 2
,
-需要分离的令牌 echo {1..$to}
->'{1..<value-of-$to>}'
-作为支撑费无效。在……里面 bash
*变量不支持;但是, 有效
在……里面 ksh
和 zsh
.(
fish
相反,扩展 任何
{...}
序列;类似地, zsh
有选择权 BRACE_CCL
(默认情况下关闭)用于展开 个人
字里行间 {..}
,这实际上导致了 任何非空的
{...}
顺序)

TA贡献1862条经验 获得超7个赞
for ((i=1;i<=howmany;i++))do echo "Welcome"done
添加回答
举报