为什么不能在文件路径中获取空格或荣誉引用?

时间:2015-05-08 21:56:12

标签: bash whitespace filepath

我将以下脚本保存为' lspkg'在我的路上:

#!/bin/bash
args=("$@")

for item in ${args[@]}; do
    echo "$item"
done

当我运行lspkg /absolute/path/to/file时,它按预期工作,打印路径。但是,以下行为给我带来了很多麻烦:

转义路径中的空格并没有真正逃离空格:

$ lspkg /absolute/path/to/file\ with\ spaces
/absolute/path/to/file\
with\
spaces

将路径放在引号中不会使bash将其视为单个字符串:

$ lspkg "/absolute/path/to/file with spaces"
"/absolute/path/to/file
with
spaces"

为什么会这样,这个问题怎么解决?

1 个答案:

答案 0 :(得分:5)

脚本中缺少重要引号,请使用:

#!/bin/bash
args=("$@")

for item in "${args[@]}"; do
    echo "$item"
done

"${args[@]}" shell中没有引号正在扩展并将其视为多个参数。