【发布时间】:2021-10-05 12:29:28
【问题描述】:
我正在尝试按如下方式创建序列:
startDay=1
endDay=2
dayRange="{$startDay..$endDay}"
echo \[\"$dayRange\",\"{00..02}\"\]
输出是:
["{1..2}","00"] ["{1..2}","01"] ["{1..2}","02"]
直接指定序列{00..02}时,会自动创建"00", "01", "02",但不理解dayRange变量。
我期望它返回的是:
["1","00"] ["1","01"] ["1","02"] ["2","00"] ["2","01"] ["2","02"]
不知道我错过了什么。 请指教。
【问题讨论】:
-
大括号扩展发生在之前参数扩展。当
$startDay和$endDay被替换为实际值时,{1..2}样式的扩展将不再运行。 -
虽然
eval有一些丑陋的黑客攻击,但理智/可靠/稳健的事情是简单地不这样做;使用for循环遍历要处理的数字范围。有关示例,请参见 ideone.com/TZoJxp。 -
顺便说一句——请参阅BashPitfalls #33中有关此问题的讨论
-
我明白了,谢谢@CharlesDuffy
标签: linux bash shell brace-expansion