【问题标题】:Get '~' Abbreviated Path in Bash在 Bash 中获取 '~' 缩写路径
【发布时间】:2016-01-30 08:57:09
【问题描述】:

我遇到了一个我觉得应该很简单的问题,但我似乎无法找出答案。

我正在尝试使用 '~' 来缩写 bash 中的路径,类似于提示符的方式。

例如,如果我有路径

/home/user/temp/file1

我想把它变成

~/temp/file1

有没有简单的方法来做到这一点?还是我需要弄清楚如何比较字符串的各个部分?

【问题讨论】:

    标签: linux bash shell path


    【解决方案1】:

    对于当前用户,可以使用子串替换操作符:

    $ path=/home/user/foo/bar
    $ echo $HOME
    /home/user
    $ echo ${path/#$HOME/\~}
    ~/foo/bar
    

    对于任意用户,我不知道一个简单的解决方案。

    【讨论】:

    • 任意用户的问题是知道您能够做到这一点并找到合适的用户。用户的主目录可以是任何东西,因此除非您打算枚举系统上的每个用户(这可能或不可能)并测试他们拥有的每个主目录,否则您没有可靠的方法确保您对所有可能的情况都这样做。
    • 啊,非常感谢。不过,我确实注意到的一件事是,虽然 $HOME 工作得很好,但 $HOME 的任何子目录都会显示完整路径。在查找子字符串替换运算符后,我相信您可以使用 '#' 代替 '%' 并且它可以工作。
    • 很抱歉;我的意思是使用#。
    • 对于任意用户,我们是否可以使用 bash 会进行 ~ 扩展的事实...? path=/home/user/foo/bar; home_other_user=~other_users_username; echo ${path/#$home_other_user/\~}
    • 哦,对了。那是……事后看来很明显:)但是,您必须已经知道用户的姓名;您不能在变量中包含其他用户的名称。
    猜你喜欢
    • 2012-01-02
    • 2014-10-16
    • 2022-06-10
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多