简单问题的复杂名称。我正在努力为我离开时与之合作的人制作一个白痴证明计划。我使用read将文件名保存为变量。当我拖放文件时,文件名称有空格(因此反斜杠),它将无效。如果我直接输入名称就行了。以下示例。
$ read -re a
/Users/microuser/Desktop/han\ scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq
$ echo $a
/Users/microuser/Desktop/han\ scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq
$ echo "$a"
/Users/microuser/Desktop/han\ scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq
$ head $a
head: /Users/microuser/Desktop/han\: No such file or directory
head: scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq: No such file or directory
$ head "$a"
head: /Users/microuser/Desktop/han\ scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq: No such file or directory
但是如果我输入它而不是使用变量。
$ head -n 1 /Users/microuser/Desktop/han\ scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq
@HWI-ST1280:209:D2GDVACXX:8:1101:2762:1973 1:Y:0:GATCAGA
如果我使用变量从文件夹名称中取出空格可以正常工作。
答案 0 :(得分:2)
文件名不包含反斜杠,只包含空格。反斜杠仅出现,因为某些应用程序将有助于使用/显示预先转发的版本,就像在bash的自动完成中一样。
以下示例应该有助于澄清这一点:
# touch "some file.txt"
# ls -lsa som*
0 -rw-rw-r--. 1 foo bar 0 Oct 9 13:49 some file.txt
# read var
some file.txt
# echo $var
some file.txt
# ls -lsa $var
ls: cannot access some: No such file or directory
ls: cannot access file.txt: No such file or directory
# ls -lsa "$var"
0 -rw-rw-r--. 1 foo bar 0 Oct 9 13:49 some file.txt
# ls -lsa some\ file.txt
0 -rw-rw-r--. 1 foo bar 0 Oct 9 13:49 some file.txt
# ls -lsa "some file.txt"
0 -rw-rw-r--. 1 foo bar 0 Oct 9 13:49 some file.txt
答案 1 :(得分:2)
在读取输入时不需要在空格之前放入反斜杠,并且避免使用-r
选项作为-r
选项说不允许反斜杠转义任何字符。
这应该有效:
$ read -e a
/Users/microuser/Desktop/han scans/D2GDVACXX_s8_0_7bp_Index_9_SL39794.fastq
$ head "$a"