2017-07-03 69 views
-1

我想在Bash中做一个循环。我测试的循环与for adr in a{a,b,c}d并将其与aad, abd, acd如何使用For ...在f {a,b,c,d} c中,但是有变量?

完美地工作,但如果我的价值​​一个变量,它不会返回上述值;相反,它只能运行一次,值为​​。
如何启用此功能?

或者,我试图从用户那里接受输入,然后用{b,c,d,f,g...y,z}替换~const~的所有实例,然后运行上述的循环。

不幸的是,正如我所说,它不工作。有没有其他方法可以完成这项工作?

+0

参见:[如何使用带有括号扩展变量(https://stackoverflow.com/q/33491233/3776858) – Cyrus

回答

1

此代码是做你想做的迂回的方式。它输出一切在一条新的线:

test=(a b c) #declare the array 
for index in "${test[@]}"; do #uses for loop to go through each item in the array 
echo "{a{$index}d}" | tr -d '{}'; #echoes the result without curly braces 
done 

希望这就是你要找的!

+0

这几乎是我想要的。只有区别,'a'和'd'也是用户输入的变量。实际上,用户将输入一个〜const〜d,并且我想要显示abd,acd,add,afd ... –

+0

你不需要回显'{}',然后用'tr'删除它们。 “echo”a $ {index} d“'或变量为'echo'$ {start} $ {index} $ {end}”''其中'start =“a” '和'end =“d”' –

+0

我知道这有点旧了,但你可以编辑我的答案..而不是“test =(abc)”,你可以有“test =($ a $ b $ c)。 “ – Nythepegasus

0

这些都是一些解决方法:

$ aa=(a{a,b,c}d);for adr in ${aa[@]};do echo "$adr";done #using array 
aad 
abd 
acd 

$ aa=$(echo a{a,b,c}d);for adr in ${aa};do echo "$adr";done #without array 
aad 
abd 
acd 

这是如何通过上述可以使用变量:

$ start="a" 
$ var1="a" 
$ var2="b" 
$ var3="c" 
$ end="d" 
$ aa=$(echo $start{${var1},${var2},${var3}}$end) 
$ for adr in $aa;do echo "$adr";done 
aad 
abd 
acd 
+0

你说得对,我不小心添加了一个循环。现在去除。 –

+0

我尝试了你的建议。它们在终端中完美工作,但是当我尝试在代码中实现时,即使在循环中,$ adr的值也会出现在{b,c,d} d中。这是因为我将$ aa的价值作为投入? –

+0

@ 15KanurajBeri在我的答案中查看更新,了解如何使用变量进行此项工作。 –

相关问题