循环通配符作为脚本的输入

循环通配符作为脚本的输入

有时我想在许多文件上使用我的脚本。

我用这个的目的是:

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
其中将详细阐述其中的许多方面。

相关内容