有时我想在许多文件上使用我的脚本。
我用这个的目的是:
for etminput in $1
do
#process
done
但这只是给出第一个输入。如何对每个通配符匹配执行该过程?
答案1
如果您想在任何 Bourne 之类的 shell 中循环遍历脚本的所有参数,则为:
for i do
something with "$i"
done
你还可以这样做:
for i in "$@"; do
something with "$i"
done
但它更长并且不那么便携(尽管适用于现代外壳)。
注意:
for i; do
something with "$i"
done
既不是 Bourne 也不是 POSIX,所以应该避免(尽管它在许多 shell 中都可以工作)
为了完整起见,在非 Bourne shell 中:
csh/tcsh
@ i = 1
while ($i <= $#argv)
something with $argv[$i]:q
@ i++
end
您不能使用:
foreach i ($argv:q)
something with $i:q
end
因为这会跳过空参数
RC/阿坎加
for (i) something with $i
(rc
一般就是什么shell应该像)。
英语
for (i=$*) something with $i
(es 是 rc 的类固醇)。
鱼
for i in $argv
something with $i
end
桀骜
虽然它接受 Bourne 语法,但它也支持较短的语法,例如:
for i ("$@") something with "$i"
答案2
#!/bin/bash n=1 echo "$0 得到 $# args..." 而 [ $# -gt 0 ] ;do 回显“$n:$1” 转移 n=$(($n + 1 )) 完毕
或者,查找“用 $* 和 $@ 列出参数
”http://www.tldp.org/LDP/abs/html/abs-guide.html
其中将详细阐述其中的许多方面。