向程序传递命令行参数
一, 直接提供
cat cmd.c arg.c main.c
二, 通过 shell 通配符提供
cat *.c
shell 在执行命令 cat 之前,首先找到所有的 c 文件,并将这些文件以空格分隔,作为 cat 的参数,并执行 cat 。
三, 通过 `` 执行命令
cat `ls *.c`
shell 在执行 cat 之前,首先执行 `` 中的 ls *.c ,并用其执行结果替换 `` ,替换完毕后,组成 cat 命令并执行
四, 通过 xargs
ls *.c | xargs cat
xargs 会通过管道收集前一个程序的输出,并将其转换为参数,调用下一个传递给他的命令。他保证了最大的命令行参数的长度。
五, 如果 shell 不支持 `` 的话,可以自己编写程序 ( 如 Windows 平台 )
mysh cat “`dir /S /B*.c`”
这样 mysh 就会有 3 个命令行参数,分别是 mysh , cat 和 `dir /S /B *.c` 。注意 `` 两边的 ” 是必要的,如果没有的话,传递给 mysh 的参数将分别是 mysh , cat , `dir , /S , /B 和 *.c 。而这并不是我们所期望的。
六, 如果没有 xargs 的话,也可以实现一个 wargs
参照 xargs
七, 各方法对比
Shell 通配符只支持文件。
`` 可以出现在任意位置出现,可以出现任意次。
xargs 传递的参数只能在最后。