在路径参数bash中保留斜杠



我有一个bash脚本,可以接收文件作为如下参数:

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

现在我想保存参数:

>args=$@

>args=$*

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

dirsmalldirfile1.txt file3.txt 

没有斜杠。我该如何解决这个问题?我是新来的,还有作业。

谢谢。

如果你改变IFS的设置,你可以得到接近结果的字段间分隔符:

$ set -- "/abc/def/ghi" "jkl" "mno pqr/stu vwx"
$ print "%sn" "$@"
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=$' tn'
$

这并没有把两个单词放在一起,但是省略了斜杠。为了更好地诊断问题,您需要在脚本中提供更多的代码。


不考虑斜杠消失的问题,如果你需要保存参数,你应该使用:

args=("$@")

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

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

问题中使用的符号是:

args=$*
args=$@

这两种方法都将文件名保存为单个字符串,原始名称之间用空格分隔。如果原始文件名中有空格,则无法可靠地将其拆分为原始文件名。大多数情况下,这并不是你想要的。

最新更新