我想运行这样的Bash脚本:
./myscript.sh A B C D E F
,然后在脚本中我想有一个循环来运行这些命令:
somecommand -x A -y B C D E F
somecommand -x B -y A C D E F
somecommand -x C -y A B D E F
somecommand -x D -y A B C E F
somecommand -x E -y A B C D F
somecommand -x F -y A B C D E
执行此操作的最佳方法是什么?在python中,我会做类似的事情:
for i, first in enumerate(sys.argv[1:]):
others = sys.argv[1:i] + sys.argv[i+1:]
do_command(first, others)
但是我不确定如何在Bash中执行类似的操作。
答案 0 :(得分:3)
您可以在bash中非常相似地执行此操作,使用间接扩展(label
)获取单个参数,并使用类似于数组切片的语法获取它们的范围("${!argnum}"
和{{1 }})。像这样:
"${@:startarg:numargs}"
如果要使用显式"${@:startarg}"
数组,请按以下方式创建它:
for ((i=1; i<=$#; i++)); do
somecommand -x "${!i}" -y "${@:1:i-1}" "${@:i+1}"
done