如果我有一个文件列表说file1
... file20
,如何运行一个包含文件列表作为参数的命令,例如myccommand file1 file2 ... file20
?
答案 0 :(得分:5)
如果你的列表在你的参数向量中 - 也就是说,如果你开始于:
./yourscript file1 file2 ...
然后你就跑了
mycommand "$@"
如果您的列表在数组中:
mycommand "${my_list_of_files[@]}"
如果您的列表位于NUL分隔文件中:
xargs -0 -- mycommand <file_with_argument_list
如果您的列表位于换行符分隔的文件中(您不应该对文件名执行此操作,因为文件名可以合法地包含换行符):
readarray -t filenames <file_with_argument_list
mycommand "${filenames[@]}"
如果通过“list”,你只是意味着你有一系列文件:
mycommand file{1..20}
答案 1 :(得分:1)
查看shift
bash命令(man bash
)。您可以迭代,每次都$1
。
for n in $(seq 1 $#); do
echo $1
shift
done
调用此文件myshift.sh
。然后
$ ./myshift.sh a b c
a
b
c
答案 2 :(得分:1)
如果要生成seq
的文件列表,可以使用命令替换将它们放入命令行:
mycommand $(seq ...)
如果生成的文件名中包含任何空格(或制表符或换行符......),则会失败。
您还可以使用bash的花括号扩展来生成它们而不是seq
,例如file{1..10}
来生成file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
。即使文件名在公共部分中包含空格,只要您正确引用它(例如"file name"{1..10}
),这样做的好处就是工作。