我正在运行一些测试,我需要使用一些输入的组合来运行一个特殊的shell脚本。
假设我有脚本test.sh
,它带有3个参数:A,B,C。
A可以是1或2,B可以是" aa"或" bb"和C可以是7或8
我想自动启动所有可能的组合,所以
./test 1 "aa" 7
./test 1 "aa" 8
./test 1 "bb" 7
./test 1 "bb" 8
./test 2 "aa" 7
./test 2 "aa" 8
./test 2 "bb" 7
./test 2 "bb" 8
有些东西已经准备好并经过测试了吗?
编辑:排列 - >组合
答案 0 :(得分:3)
使用shell支撑扩展有点丑陋(ab)允许:
$ for i in {1,2}\ {aa,bb}\ {7,8}; do
echo {$i}
done
{1 aa 7}
{1 aa 8}
{1 bb 7}
{1 bb 8}
{2 aa 7}
{2 aa 8}
{2 bb 7}
{2 bb 8}
但这只适用于单个值不包含空格或shell / glob元字符的情况。
如果它们可以包含其中任何一种,那么这是不安全的,应该避免。
答案 1 :(得分:2)
你可以使用3 for循环:
for x in 1 2; do
for y in "aa" "bb"; do
for z in 7 8; do
./test $x $y $z
done
done
done
试运行:
$ for x in 1 2; do > for y in "aa" "bb"; do > for z in 7 8; do > echo $x $y $z > done;done;done 1 aa 7 1 aa 8 1 bb 7 1 bb 8 2 aa 7 2 aa 8 2 bb 7 2 bb 8
现在可能有一种方法可以在一个for循环中压缩它们,如果这是你的愿望,你可能想等待另一个答案。