如何迭代bash中列表中的所有对组合?

719*_*016 6 bash

我在 bash 中定义了一个列表,如下所示:

list="element1 element_2 my_element_3 element04"
Run Code Online (Sandbox Code Playgroud)

我想做一个循环,遍历所有可能的对组合。在 Perl 中,我会使用 while/foreach 并在列表上进行如下移动:

while (my $element1 = shift (@list)) {
  foreach my $element2 (@list) {
      print "$element1 - $element2\n";
  }
}
Run Code Online (Sandbox Code Playgroud)

我不想要对中的相同元素,也不关心对的顺序,所以如果列表是“AB C”,结果应该是:

A - B
A - C
B - C
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 bash 中做等效的事情?

jw0*_*013 10

最简单的方法似乎是使用位置参数。

set -- value1 value2 "value with spaces"
for a; do
    shift
    for b; do
        printf "%s - %s\n" "$a" "$b"
    done
done
Run Code Online (Sandbox Code Playgroud)