我正在尝试编写一个自定义命令来将文件复制到特定目录中。 我不确定这样做的最好方法。现在,脚本就是这个
#!/bin/sh
cp -rf $1 /support/save/
我调用了这个命令filesave
,它适用于1个文件,但如果你做* .sh或类似的东西,它只会复制第一个文件。这是有意义的,因为这是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!