我正在寻找一个能够实现类似效果的衬里(带有 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