将参数列表传递给shell中的命令

时间:2014-07-23 18:55:04

标签: shell command-line-arguments

如果我有一个文件列表说file1 ... file20,如何运行一个包含文件列表作为参数的命令,例如myccommand file1 file2 ... file20

3 个答案:

答案 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}),这样做的好处就是工作。