ls 在 bash 脚本中传递“~”时找不到“~”。有什么区别?

时间:2021-02-28 16:42:57

标签: 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 的路径会混淆 "" 吗?

0 个答案:

没有答案