xl0*_*xl0 8 linux shell bash shell-script
有没有办法在 bash 中不使用循环来生成数组的笛卡尔积?
可以使用大括号做类似的事情:
echo {a,b,c}+{1,2,3}
a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3
Run Code Online (Sandbox Code Playgroud)
但我需要使用数组作为输入,而且大多数明显的技巧都让我失望。
您可以使用大括号扩展。但它很丑。您需要使用eval, 因为大括号扩展发生在(数组)变量扩展之前。并"${var[*]}"与IFS=,创建逗号。
考虑一个生成字符串的命令
echo {a,b,c}+{1,2,3}
Run Code Online (Sandbox Code Playgroud)
假设数组被称为lettersand numbers,您可以使用"${var[*]}"符号来做到这一点, withIFS=,在元素之间插入逗号而不是空格。
letters=(a b c)
numbers=(1 2 3)
IFS=,
echo {"${letters[*]}"}+{"${numbers[*]}"}
Run Code Online (Sandbox Code Playgroud)
哪个打印
{a,b,c}+{1,2,3}
Run Code Online (Sandbox Code Playgroud)
现在添加eval,因此它将该字符串作为命令运行
eval echo {"${letters[*]}"}+{"${numbers[*]}"}
Run Code Online (Sandbox Code Playgroud)
你得到
a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3
Run Code Online (Sandbox Code Playgroud)