bash函数 - 为什么它不起作用

时间:2015-04-11 22:57:13

标签: bash function terminal

我一直试图让它工作一段时间,我仍然感到困惑,为什么它不起作用。我正在尝试向我的bashrc添加一个函数,以cd到下一个包含文件或其中多个目录的目录。但我不能让这个测试文件工作,我不明白这个问题。找 。 -maxdepth 1-type f在我输入终端时起作用,但在这里似乎不起作用。并且-z应该测试它是否为null,当它在空目录中进行Icall时它应该是。但它只返回每次检测到的文件...是否在doFilesExist中使用了点运算符?

function cdwn(){
    # check if there are files or multiple directories in current wd
    doFilesExist="find . -maxdepth 1 -type f"
    if [ -z '$doFilesExist' ]; then
        echo "no files  detected"
    else
        echo "files detected"
    fi
}

谢谢大家,似乎正在使用以下内容:

function cdwn(){
    # check if there are files or multiple directories in current wd
    doFilesExist=`find . -maxdepth 1 -type f`
    if [ -z "$doFilesExist" ]; then
        echo "no files  detected"
    else
        echo "files detected"
    fi
}

但我不满意,因为我不明白我为什么遇到问题,你能否提出一些我可以遵循的指南以便更好地理解?我显然已经忘记了或者过去不了解的事情!

2 个答案:

答案 0 :(得分:1)

看起来像是错误的引号。将bash命令的结果放入变量:

doFilesExist=$(find . -maxdepth 1 -type f)

doFilesExist=`find . -maxdepth 1 -type f`

if块的部分也应更改为[ -z "$doFilesExist" ]: "在单引号字符串中,没有任何内容(!!!!)被解释,除了关闭引号的单引号" source

答案 1 :(得分:1)

您应该尝试以下方法:

function cdwn(){
    # check if there are files or multiple directories in current wd
    files=$(find . -maxdepth 1 -type f | wc -l)
    if [[ ${files} -gt 0 ]]; then
        echo "files detected"
    else
        echo "no files detected"
    fi
}

不要使用-z进行检查,因为它检查是否设置了变量,它没有说明大小。您只是将命令存储为字符串,它从未被执行过。要执行它,您可以将内容存储在变量中,就像其他一些答案所建议的那样,但这些变量可能变得非常大。