我正在使用基于 Bash 的黑盒 CLI,但我不完全确定我可以使用哪些东西。大括号扩展不起作用,并且随之而来的是我在不显式列出参数的情况下执行循环的能力,这是我一开始就试图通过循环来避免的事情。
for x in {1..5}
do
for y in {a..c}
do
echo $HOME$x$y
done
done
如何在不使用大括号扩展且不显式列出参数的情况下运行类似的操作?环境变量也应该起作用,这就是我$HOME
在示例中附加随机变量的原因。
请随意提供不同的替代方案(AWK、sed),因为我不完全确定什么有效,什么无效。
答案1
你最好jot
按照评论使用。这是一个(不太漂亮)的awk
实现。
#!/usr/bin/awk -f
BEGIN{
for(i=1;i<5;i++)
for(j=97;j<100;j++)
printf "%s%d%c ",ENVIRON["HOME"],i,j;
print;
}
或者(您也可以使用将 shell 变量分配给变量-v
的选项)awk
awk
#!/bin/bash
awk -f /dev/fd/3 3<< EOF
BEGIN{
for(i=1;i<5;i++)
for(j=97;j<100;j++)
printf "$HOME%d%c ",i,j;
print;
}
EOF
答案2
如果您确定运行了bash
,则可能未启用大括号扩展。
通过使用检查它
echo $-
himBHs
在我使用的 shell 中,B
设置了该选项,表示启用了大括号扩展。
您可以使用以下命令之一设置大括号扩展:
set -o braceexpand
set -B
在这种情况下,我不需要循环字母或数字:
echo {1..5}{a..c}
1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c
或通过使用禁用它
set +o braceexpand
set +B
导致
echo {1..5}{a..c}
{1..5}{a..c}