可以在花括号中展开Bash变量吗?

可以在花括号中展开Bash变量吗?,bash,brace-expansion,Bash,Brace Expansion,在BASH中,是否可以在大括号展开中展开变量 例如,如果想要获得打印序列1到10,则可以 做: 假设我有一个变量rangeEnd,而不是10,我想用它来代替。大致如下: rangeEnd=10 echo {1..$rangeEnd} 然而,这会产生{1..10},而不是12345678910。是否有任何方法可以使用大括号展开获得正确的序列(12345678910)? (我已经知道我可以使用echo$(seq 0$(rangeEnd)),但我想看看是否确实可以使用大括号展开)您想这样使用eval

在BASH中,是否可以在大括号展开中展开变量

例如,如果想要获得打印序列1到10,则可以 做:

假设我有一个变量
rangeEnd
,而不是10,我想用它来代替。大致如下:

rangeEnd=10
echo {1..$rangeEnd}
然而,这会产生
{1..10}
,而不是
12345678910
。是否有任何方法可以使用大括号展开获得正确的序列(
12345678910
)?
(我已经知道我可以使用
echo$(seq 0$(rangeEnd))
,但我想看看是否确实可以使用大括号展开)

您想这样使用
eval

eval "echo {1..${rangeEnd}}"
试试这个

rangeEnd=10
eval echo {1..$rangeEnd}

请不要鼓励
eval
使用。正是因为这个原因,我们今天在Red Hat的DHCP服务中发现了一个主要的安全漏洞。在数值范围内迭代有更安全的方法。另请参见评估指挥和安全问题。如果
rangeEnd
不是一个数字,而是攻击者选择的一个值,这可能会导致代码执行,而选择更好的方法只会导致错误。问题清楚地表明,他知道你的答案中提到的方法是如何为他所知的,我想知道花括号是如何用变量展开的。我想从技术上来说,所有的解决方案都是有效的,所以你们都回答了我的问题(谢谢!)。尽管如此,有没有任何人都知道的非评估方式?@charlesduff我明白你的意思。如果变量在脚本中硬编码,则此风险不是问题。如果该值来自某个外部源,那么只有首先检查
${rangeEnd}
的值是否为数字、非负,并且该值是否合理小,我们才能安全地调用
eval
。当然,这只适用于这个特定的用例。其他用例需要根据具体情况进行评估,这大概就是为什么您宁愿说
eval
是绝对不允许在安全方面出错的原因。@derek您是否在试图找到一种使用大括号扩展且不使用
eval
的解决方案?如果是这样,我不知道有这样的解决办法。但是,如果您愿意放弃其中一个需求,那么是的,有多种解决方案,正如您已经知道的。
rangeEnd=10
eval echo {1..$rangeEnd}