【问题标题】:Bash terminal does not recognize a path in a variable because of the "~" [duplicate]由于“〜”,Bash终端无法识别变量中的路径[重复]
【发布时间】:2015-02-24 19:41:33
【问题描述】:

例如,如果我输入 ~ 或 ~/Documents 作为输入,我会收到消息:没有这样的文件或目录

但是,如果我使用 /home/username/Documents 就可以了。

echo "Dose onoma katalogou"

read Directory

find $Directory -type f -perm 777

知道为什么会发生这种情况以及如何解决它以便能够键入包括“~”在内的路径名?

【问题讨论】:

    标签: bash variables find pathname


    【解决方案1】:

    bash 扩展变量 $Directory after 它扩展任何 ~,因此一旦 $Directory 扩展,扩展 ~ 的时间已经过去了。

    eval find $Directory -type f -perm 777
    

    会起作用,因为 eval 会看到 ~ 并再次运行 shell 扩展。

    您可以通过更简单的命令来测试效果:

    tilde='~'
    echo $tilde            # prints a literal ~
    eval echo $tilde       # prints your home directory
    

    顺便说一句,包含空格的目录名会导致问题。

    【讨论】:

    • 当心:eval 是一个非常强大的机制——如果用户控制$Directory 的内容会非常危险。例如,如果用户将Directory='$(rm -f $HOME &)' 输入到eval 命令中,有人会很不高兴——尤其是如果脚本是由root 运行的。
    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 2018-09-24
    • 2011-05-20
    • 2021-05-01
    • 2015-01-13
    • 1970-01-01
    • 2023-04-07
    • 2018-09-22
    相关资源
    最近更新 更多