可以同时使用大括号(排列)和数组扩展吗?

可以同时使用大括号(排列)和数组扩展吗?

Bash 的{}大括号扩展语法允许创建简单的排列

# echo {b,c,d}{a,e,i,o,u}
ba be bi bo bu ca ce ci co cu da de di do du

然而,我不清楚是否/如何可以将其与数组一起使用,除非非常尴尬地使用$() echoeval

有没有一种简单的方法来使用带有大括号(排列)扩展的数组?

例如,想象一下类似的事情(当然这是行不通的):

CONS=( b c d )
VOWEL=( a e i o u )

echo {${CONS[@]}}{${VOWEL[@]}}

答案1

您可以使用 eval with IFS=,; "${array[*]}"(用逗号连接值)或仅使用两个 for 循环:

$ CONS=(b c d);VOWEL=(a e i o u)
$ IFS=,;eval echo "{${CONS[*]}}{${VOWEL[*]}}"
ba be bi bo bu ca ce ci co cu da de di do du
$ for c in "${CONS[@]}";do for v in "${VOWEL[@]}";do echo "$c$v";done;done|paste -sd' ' -
ba be bi bo bu ca ce ci co cu da de di do du

答案2

这是可能的zsh

$ CONS=( b c d )
$ VOWEL=( a e i o u )
$ echo $^CONS$^VOWEL
ba be bi bo bu ca ce ci co cu da de di do du

或者es:

; VOWEL=( a e i o u )
; CONS=( b c d )
; echo $VOWEL^$CONS
ab ac ad eb ec ed ib ic id ob oc od ub uc ud

使用bashor ksh93,您必须做一些复杂的事情,例如:

VOWEL=( a e i o u )
CONS=( b c d )
qVOWEL=$(printf %q, "${VOWEL[@]}")
qCONS=$(printf %q, "${CONS[@]}")
eval "echo {${qVOWEL%,}}{${qCONS%,}}"

答案3

有趣,但可能不是最好的。

temparr=( b{a,e,i,o,u} c{a,e,i,o,u} d{a,e,i,o,u} )
echo "${temparr[@]}"

相关内容