首页 > 解决方案 > 在 bash 脚本中传递“~”时找不到“~”。有什么区别?

问题描述

我在使用ls来确定某个路径是否是文件夹时遇到了一个奇怪的问题。我正在尝试验证用户输入字符串是否是有效目录。我ls -ld用来检查输入,然后将输出的第一个字符与d.

我假设下面的代码可以工作,但事实并非如此。其他有效路径(不以 开头~)可以作为字符串工作。

#!/bin/bash
is_valid_dir() {
    echo "input=$1"
    ls_result=$(ls -ld $1)
    echo "$ls_result"
    if [[ ${ls_result:0:1} == d ]]; then
        echo "input is a directory"
        return 0
    else
        echo "input is not a directory"
        return 1
    fi
}
is_valid_dir /home/simon                # Works
is_valid_dir .                          # Works
is_valid_dir ../.                       # Works
is_valid_dir ~                          # Works
is_valid_dir ~/..                       # Works
is_valid_dir "/home/simon"              # Works
is_valid_dir "."                        # Works
is_valid_dir "../."                     # Works
is_valid_dir "~"                        # Doesnt Work!
is_valid_dir "~/.."                     # Doesnt Work!

有人可以告诉我为什么提供相对于的路径会在提供时~混淆吗?ls""

标签: bash

解决方案


推荐阅读