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