【问题标题】:How do I use For...In f{a,b,c,d}c, but with variables?我如何使用 For...In f{a,b,c,d}c,但使用变量?
【发布时间】:2017-07-03 18:17:39
【问题描述】:

我正在尝试在 Bash 中创建一个循环。我用for adr in a{a,b,c}d 测试了循环,它与aad, abd, acd 完美配合

但如果我有一个值为a{a,b,c}d 的变量,它不会返回上述值;相反,它只运行一次,值为a{a,b,c}d
如何启用此功能?

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

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

【问题讨论】:

标签: linux bash for-loop terminal for-in-loop


【解决方案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

希望这就是您要找的东西!

【讨论】:

  • 这几乎就是我想要的。唯一不同的是,“a”和“d”也是用户输入的变量。其实用户会输入a~const~d,而我要显示abd、acd、add、afd...
  • 您不需要回显{ },然后使用tr 删除它们。根本不要回显这些括号:echo "a${index}d" 或在变量 echo "${start}${index}${end}" 的情况下,start="a"end="d"
  • 我知道这有点旧,但你可以编辑我的答案。你可以用“test=( $a $b $c )”代替“test=( a b c )”。
【解决方案2】:

这些是一些解决方法:

$ 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

【讨论】:

  • 你说得对,我不小心添加了一个额外的循环。立即删除。
  • 我尝试了你的建议。它们在终端中完美地工作,但是当我尝试在代码中实现时,$adr 的值出现在 a{b,c,d}d 中,即使在循环中也是如此。这是因为我将 $aa 的值作为输入吗?
  • @15KanurajBeri 请参阅我的回答中有关如何使用变量进行此操作的更新。
  • 谢谢。这很有帮助。但是,如果用户只是输入“abc~const~”,没有结束变量,那我们怎么拆分呢?
  • @15KanurajBeri 如果您在我的示例中取消设置(或根本没有设置)最后一个变量$end,将按预期工作。将输入文本拆分为三个文本并在中间文本中应用大括号扩展,这是一个全新的练习。此外,您可以查看参数扩展${parameter:+word}(有关详细信息,请参阅 man bash - gnu.org/software/bash/manual/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多