我将以下脚本保存为' 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"
为什么会这样,这个问题怎么解决?
答案 0 :(得分:5)
脚本中缺少重要引号,请使用:
#!/bin/bash
args=("$@")
for item in "${args[@]}"; do
echo "$item"
done
在"${args[@]}"
shell中没有引号正在扩展并将其视为多个参数。