【问题标题】:Quote a filename containing quotes and given as variable in Bash引用包含引号的文件名并在 Bash 中作为变量给出
【发布时间】:2017-03-01 14:06:38
【问题描述】:
假设我在变量DIR 中有一个目录路径,我想列出这个目录。如果我只关心路径中的空格,那么我可以这样做
ls "$DIR"
如果我还想在目录路径中支持单引号和双引号以及其他奇怪的东西,我应该写什么?示例:
DIR="/Users/Mick O'Neil (the \"Terminator\")/Desktop"
echo $DIR # prints /Users/Mick O'Neil (the "Terminator")/Desktop
ls <what should I write here?>
【问题讨论】:
标签:
linux
bash
macos
command-line
【解决方案1】:
引号不仅适用于空格,还适用于所有内容,因此使用双引号是您需要的安全级别。
来自Bash Reference Manual on Quoting:
3.1.2.3 双引号
将字符括在双引号 ('"') 中会保留引号内所有字符的字面值,但 '$'、'`'、'\' 以及启用历史扩展时,'! '。
让我们将此字符串存储到文件中以供以后使用。
$ cat file
Mick O'Neil (the "Terminator")
读入一个变量:
$ filename=$(<file)
检查它的值:
$ echo "$filename"
Mick O'Neil (the "Terminator")
用这个值创建一个文件:
$ touch "$filename"
检查是否创建成功:
$ lt "$filename"
-rw-r--r-- 1 me me 0 Mar 1 15:09 Mick O'Neil (the "Terminator")