【发布时间】:2021-07-11 00:40:40
【问题描述】:
这个命令会报错
wc -l "~/tmp.txt"
wc: '~/tmp.txt': No such file or directory
虽然这些命令运行良好
wc -l ~/tmp.txt
14 /home/user/tmp.txt
wc -l "/home/user/tmp.txt"
14 /home/user/tmp.txt
有什么区别?如果路径中有空格,我可以做些什么来在双引号中包含“~”吗?
【问题讨论】:
-
shell (
bash) 根据man page 中的“波浪号扩展”规则扩展波浪号。如果您引用字符串,则不会执行扩展,而是使用文字字符串。您可以直接转义空格,例如wc -l ~/foo\ bar(或者甚至只是包含空格的位,显然,例如:wc -l ~/"foo bar"/baz) -
您可以使用
$HOME代替~并将其包含在双引号中。 -
这更适合Unix & Linux,那里已经有很多重复项。 Why doesn't the tilde (~) expand inside double quotes?, Getting negative on test for HOME directories with tilde ~ expansion, Tilde in path doesn't expand to home directory, How to expand tilde (~) in path (duplicate), Why isn't tilde (~) expanding inside double quotes? (duplicate),
标签: bash quotes double-quotes spaces tilde-expansion