如何列出所有单词组合?

如何列出所有单词组合?

我正在寻找一个能够实现类似效果的衬里(带有 2 个或更多参数字符串):

$ make_combinations "1 2" "a b c"
1 a
1 b
1 c
2 a
2 b
2 c

当然,我可以制作嵌套的 for 循环,但如果有一种通用且快速的方法来实现这一点,那就更好了。这对于与 xargs 一起使用非常有用。

提前致谢!

答案1

printf "%s\n" {1,2}" "{a,b,c}
1 a
1 b
1 c
2 a
2 b
2 c

或者

echo {1,2}" "{a,b,c} | xargs -n 2
1 a
1 b
1 c
2 a
2 b
2 c

正如 @George Vasiliou 在他的评论中提到的,当列表可以写成一个范围时,您可以按如下方式使用它:

printf '%s\n' {1..2}" "{a..c} 

答案2

function brace {
  first=$1
  first=${first//,/\\\,}
  first=${first//\{/\{}
  first=${first//\}/\\\}}
  if [[ $first =~ [[:space:]] ]]
  then
    first=${first// /,}
    str={"${first}"}
  else
    str="${first}"
  fi
  shift
  for arg
  do
    arg=${arg//,/\\\,}
    arg=${arg//\{/\\{}
    arg=${arg//\}/\\\}}
    if [[ $arg =~ [[:space:]] ]]
    then
      arg=${arg// /,}
      str="${str}"'" "{'"$arg"'}'
    else
      str="${str}"'" "'"${arg}"
    fi
  done
  eval printf '%s\\n' "$str"
}

$ brace } "a b" { "c,d,e f"
} a { c,d,e
} a { f
} b { c,d,e
} b { f

相关内容