我试图弄清楚如何在破折号中匆忙下面的 bash 脚本。
for x in {1..5}
do
for y in {a..c}
do
echo $HOME$x$y
done
done
Dash 不支持大括号扩展,我不知道有任何其他方法可以获取类似范围的构造以模仿上面的脚本。我想我可以通过一个while循环来解决,但我不认为这是一个脚本改编,而是一个完全不同的野兽。
是否可以在 Dash 中保留上述脚本的精神?是否可以在不使用 seq 等外部程序的情况下保持上述脚本的精神?如何?
POSIX 本身没有定义大括号扩展,您需要使用其他 POSIX 投诉工具中的选项进行转换。一种这样的方法是使用 ASCII 表来映射从字符的 ASCII 值到它们的字符值的转换,使用
printf()
. 查找man ascii
值映射。可能不会,因为如果有另一个功能可以完成大括号扩展所做的事情,那么就不需要大括号扩展......
请注意,如果您的列表不是静态的(例如上限不同),那么您也不能在 Bash 中轻松使用大括号扩展,因为
{1..$n}
它不会做您想要的(大括号在变量之前扩展)。另一方面,如果您的列表是静态的,那么使用其他程序来创建列表并将它们直接插入到脚本中并不难,因此您最终会得到:
在 shell 中使用 a
while
来生成字符列表似乎也有点困难。所以,对不起,但这似乎用其他语言更容易完成。像 Perl: