在shell中,~ 是一个特殊的变量,但你放在 file_path 时,它当做字符串处理了。所以当你使用 $file_path 时,也就提示不存在了
如果你需要在变量中 使用 ~ 且扩展它,而不是当做普通字符串的话,请在使用时进行特殊处理,如把 ~/Downloads 替换成 $(echo ~)/Downloads
这个不是Linux的问题,是你不了解Linux
在shell中,~ 是一个特殊的变量,但你放在 file_path 时,它当做字符串处理了。所以当你使用 $file_path 时,也就提示不存在了
如果你需要在变量中 使用 ~ 且扩展它,而不是当做普通字符串的话,请在使用时进行特殊处理,如把 ~/Downloads 替换成 $(echo ~)/Downloads
这个不是Linux的问题,是你不了解Linux
多谢! echo ~ 的确会返回 /home/某某
但我岂不是先要判断用户输入路径里面是否包含 ~ 符号,再获取 echo ~ ,再用字符串操作替换? 多了几步逻辑处理。
本来 realpath ~/Downloads 就能得到结果,无奈那个变量里的 ~/Downloads 怎么就变成加上单引号的了呢, 而realpath 却又傻傻地不认这个两边的单引号? linux 路径名里如果包含空格不是要用引号括起来的吗?
我刚才测了一下:
realpath ~/testspace.txt
可以返回结果
realpath ~/test space.txt
realpath ‘~/test space.txt'
都不行
在linux下,‘~’等同于 ‘$HOME’ 这个系统环境变量,都是表示当前用户的HOME目录,虽然单符号更便于书写,但是代码中使用变量名可读性更好,还可以避免你上面所出现的符号冲突,不是更好?
在linux下,‘~’等同于 ‘$HOME’ 这个系统环境变量,都是表示当前用户的HOME目录,虽然单符号更便于书写,但是代码中使用变量名可读性更好,还可以避免你上面所出现的符号冲突,不是更好?
我前面交代过 ~ 包含在通过 read 命令读取的用户输入路径里面,不是写死在代码里面的
我前面交代过 ~ 包含在通过 read 命令读取的用户输入路径里面,不是写死在代码里面的
如果你的用户输入是不可控的
那你肯定要单独处理这一步啊
#!/bin/bash
read -e -r file_path
file_path=${file_path/#\~/$HOME}
realpath "$file_path"
多谢! echo ~ 的确会返回 /home/某某
但我岂不是先要判断用户输入路径里面是否包含 ~ 符号,再获取 echo ~ ,再用字符串操作替换? 多了几步逻辑处理。
本来 realpath ~/Downloads 就能得到结果,无奈那个变量里的 ~/Downloads 怎么就变成加上单引号的了呢, 而realpath 却又傻傻地不认这个两边的单引号? linux 路径名里如果包含空格不是要用引号括起来的吗?
我刚才测了一下:
realpath ~/testspace.txt
可以返回结果
realpath ~/test space.txt
realpath ‘~/test space.txt'
都不行
实际上
realpath ~/test.txt
这样的命令在执行时分两步,第一步bash会将该命令展开为
realpath /home/username/test.txt
第二步才是执行realpath得到
/home/username/test.txt
因此,realpath从来都不能解析~,它甚至不知道你输入了~。它得到的就已经是解析之后的结果了。单引号同理。
多谢! echo ~ 的确会返回 /home/某某
但我岂不是先要判断用户输入路径里面是否包含 ~ 符号,再获取 echo ~ ,再用字符串操作替换? 多了几步逻辑处理。
本来 realpath ~/Downloads 就能得到结果,无奈那个变量里的 ~/Downloads 怎么就变成加上单引号的了呢, 而realpath 却又傻傻地不认这个两边的单引号? linux 路径名里如果包含空格不是要用引号括起来的吗?
我刚才测了一下:
realpath ~/testspace.txt
可以返回结果
realpath ~/test space.txt
realpath ‘~/test space.txt'
都不行
用字符串连接就好啦,只要两个字符串是相邻的就会自动连接起来,不管他是不是用引号括起来的,也不管是单引号还是双引号。
比如楼主这个就这么写:
realpath ~'/test space.txt'
xdg-user-dir DOWNLOAD
Popular Events
More
我在写bash脚本的时候遇到了下面的问题,平时主要用gentoo, 所以在gentoo 论坛发帖求助 https://forums.gentoo.org/viewtopic-p-8851192.html#8851192
在Deepin上测试也是这样的结果,看起来是比较普遍的linux shell的现象,gentoo 帖子里包含了简单的命令和结果,因为比较容易重现,我就又到这里发一下占用大家一点时间。
就是用户输入的路径不包含单引号,echo一下读入的变量也看不出单引号,单在 realpath 里用这个变量去表现为路径被单引号扩起来了,导致 realpaath 说找不到文件
guyuming@localhost ~ $ read -e -r file_path
~/Downloads
guyuming@localhost ~ $ realpath $file_path
realpath: '~/Downloads': 没有那个文件或目录
guyuming@localhost ~ $ echo $file_path
~/Downloads
guyuming@localhost ~ $ realpath '~/Downloads'
realpath: '~/Downloads': 没有那个文件或目录
guyuming@localhost ~ $ realpath ~/Downloads
/home/guyuming/Downloads
guyuming@localhost ~ $