在路径参数bash中保留斜杠?

时间:2013-05-29 20:37:34

标签: bash

我有bash脚本接收文件作为参数,如

>myscript dir/smalldir/file1.txt file3.txt

现在我想保存args:

>args=$@

>args=$*

但是当我尝试使用它时,会打印出来:

dirsmalldirfile1.txt file3.txt 

没有斜线。我怎样才能解决这个问题?我是新来的打击并做作业。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果改变IFS(场间分隔符)的设置,您可以接近看到的结果:

$ set -- "/abc/def/ghi" "jkl" "mno pqr/stu vwx"
$ print "%s\n" "$@"
abc/def/ghi
jkl
mno pqr/stu vwx
$ echo "$@"
abc/def/ghi jkl mno pqr/stu vwx
$ IFS=/
$ echo $@
abc def ghi jkl mno pqr stu vwx
$ IFS=$' \t\n'
$

这不会同时运行这些单词,但确实会丢失斜杠。为了更好地诊断您的问题,您需要在脚本中提供更多代码。


独立于消失斜杠的问题,如果你需要保存参数,你应该真的使用:

args=("$@")

这会将文件名保存到数组中,使名称分开并正确处理空格。然后,您可以使用从0开始的索引访问单独的文件名:

echo "${args[1]}"
echo "${args[@]}"
for file in "${args[@]}"; do ...; done

问题中使用的符号是:

args=$*
args=$@

这两个文件名都保存为一个字符串,空格分隔原始名称。如果原始文件名中有任何空格,则无法可靠地将其拆分为原始文件名。大多数时候,这不是你想要的。