我一直试图让它工作一段时间,我仍然感到困惑,为什么它不起作用。我正在尝试向我的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
}
但我不满意,因为我不明白我为什么遇到问题,你能否提出一些我可以遵循的指南以便更好地理解?我显然已经忘记了或者过去不了解的事情!
答案 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
进行检查,因为它检查是否设置了变量,它没有说明大小。您只是将命令存储为字符串,它从未被执行过。要执行它,您可以将内容存储在变量中,就像其他一些答案所建议的那样,但这些变量可能变得非常大。