我有一个脚本,它使用命令行中的多个(即位置)参数,并在其中有一个for
循环遍历这些参数:
for i in "$@"; do
...
done
这意味着参数$i
会按照在命令行中指定的顺序一一填充。
这似乎意味着不可能选择当前未填充的参数 $i
。
例如,在我的脚本的以下行中,我需要引用两个不同的变量,for
循环外分别是$1
,$2
和$1
:
ffmpeg -i "$i" -i "$i" ... "${i%.*}.mp4"
该脚本以以下格式执行:
./script.sh image.jpg *.flac
...但据我了解,这个问题甚至适用于不适用于 glob 的脚本。
是否可以根据需要从循环中访问位置参数for
,而不是简单地按照它们指定的顺序?
我最终能够弄清楚这一点,尽管我不认为这是对这个问题的完美答案,因为它不满足能够从
for
循环内引用参数的要求。从这个意义上说,我认为这个答案更像是一种解决方法,我很高兴其他人出现并以更全面的方式直接回答这个问题。无论如何,这是一种适用于我当前脚本的解决方法。
据我所知,这是通过将第一个参数分配给循环
$img
外的变量来实现的。for
脚本中的每个实例都会$img
被处理,然后被shift
(与 相同shift 1
)丢弃,然后再继续下一个。从参数列表中删除所有 $img 参数后,
for
循环将使用$@
来正常循环剩余的参数。然后可以使用以下内容调用该脚本:
或者对于
$img
变量的多个实例: