我有一个像这样的bash脚本:
myfiles=("file\ with\ spaces.csv")
for file_name in "${myfiles[@]}"
do
echo "removing first line of file $file_name"
echo "first line is `head -1 $file_name`"
echo "\n"
done
但由于某些原因它无法识别空格,即使我用双引号""
括起来:
head: cannot open ‘file\\’ for reading: No such file or directory
我该如何解决这个问题?
答案 0 :(得分:4)
你需要在反引号内加双引号。外套不够。
echo "first line is `head -1 "$file_name"`"
另外,不要在文件名中加上反斜杠,因为它已经被引用了。引号或反斜杠,但不是两者。
myfiles=("file with spaces.csv")
myfiles=(file\ with\ spaces.csv)
答案 1 :(得分:1)
$''
引用。$()
是建立命令替换的更清晰的方法,因为它可以更容易嵌套。因此,您通常会撰写myfiles=('file with spaces.csv')
和echo "first line is $(head -1 "$file_name")"
。