将多个参数传递给shell包装器中的命令

时间:2015-06-05 20:46:45

标签: shell

我正在尝试编写一个自定义命令来将文件复制到特定目录中。 我不确定这样做的最好方法。现在,脚本就是这个

#!/bin/sh
cp -rf $1 /support/save/

我调用了这个命令filesave,它适用于1个文件,但如果你做* .sh或类似的东西,它只会复制第一个文件。这是有意义的,因为这是1美元的点。是否有一个输入变量只收集所​​有输入而不仅仅是特定输入?

1 个答案:

答案 0 :(得分:1)

#!/bin/sh
cp -rf -- "$@" /support/save

使用"$@"扩展到整个参数列表。将必要放在双引号中,否则它的行为与$*相同(也就是说,错误)。

--是一个广泛实现的扩展,它确保将所有后续参数视为文字参数而不是作为选项进行解析,从而使文件名以-开头安全。

要演示差异,请将以下脚本命名为quotdemo

#!/bin/sh
printf '$@: '; printf '<%s>\n' "$@"
printf '$*: '; printf '[%s]\n' $*

...并尝试运行:

touch foo.txt bar.txt "file with spaces.txt" # create some matching files
quotdemo *.txt    # ...then test this...
quotdome "*.txt"  # ...and this too!