모든 단어 조합을 나열하는 방법은 무엇입니까?

모든 단어 조합을 나열하는 방법은 무엇입니까?

나는 다음과 같은 결과를 얻을 수 있는 라이너를 찾고 있습니다(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

관련 정보