为什么这个 bash 脚本总是执行其他部分?

Why does this bash script always execute the else part?

提问人:user3689963 提问时间:7/5/2023 更新时间:7/5/2023 访问量:81

问:

for e in $( ls $1 ); do
    if [ -d $e ]; then
        echo -n "Directory $e has words="
    else 
        echo -n "File $e has words="
    fi
    echo -n $e | wc -c
done

上面的脚本总是执行其他部分,尽管 $1 中有目录。我犯了什么错误?

谢谢。

bash if-语句

评论

6赞 Gordon Davisson 7/5/2023
ls $1正在列出目录中的文件和子目录,但正在查找当前目录。用于获取项目的完整路径。更一般地说,ls 用于向用户显示文件列表,而不是用于以编程方式获取文件列表$1[ -d $e ]for e in "$1"/*; do
3赞 Cyrus 7/5/2023
请添加一个合适的 shebang (),然后将您的脚本粘贴到 shellcheck.net 并尝试实现那里提出的建议。#!/bin/bash
3赞 Shawn 7/5/2023
首先通过 shellcheck.net 运行它并修复错误。
3赞 U880D 7/5/2023
只是一个有趣的线程,关于为什么不解析 ls(以及该怎么做)?
2赞 shellter 7/5/2023
通过“查看”使用什么值执行哪些代码来学习调试脚本。您可以通过用 “包装”感兴趣的代码块并用 结束来做到这一点。这将显示代码中用于变量的值,然后您可以调查失败的原因,例如。祝你好运。set -xset +x[ -d "$e" ]

答: 暂无答案