bash - 等于和不等于运算符在 bash 脚本中不起作用

标签 bash ubuntu comparison script

我在 .sh 脚本中有这个函数:

prepare_for_test(){
    stopresources;
    initresources;
    if [ "$1" = "--gf" ]; then
            startglassfish;
    fi
    docker ps;
    notify-send "Done!" "You can now test" -t 10000;
 };
脚本的名称是 preparefortests.sh。当我在 bash 上运行它时,传递 --gf 或“--gf”:
preparefortests.sh --gf
它不运行别名 startglassfish,就好像那个 if 语句是假的一样。
我什至尝试添加对参数的检查:
if [ "$1" ] && [ "$1" != "--gf" ]; then
  echo "uknown parameter $1"
fi
但它也不起作用,例如我尝试像这样运行它:
preparefortests.sh hello
我期待“未知参数你好”。
我究竟做错了什么?

最佳答案

比较语句是正确的:

if [ "$1" = "--gf" ]; then
        startglassfish;
fi
可能还有其他问题,例如:
  • 确保在调用函数时传递 $1 参数:
    prepare_for_test $1
  • 问题可能是使用的别名。对于几乎所有用途,别名都被 shell 函数所取代。因此,您要么需要将别名作为函数并将其导出,要么使用特殊变量 BASH_ALIASES。在您的情况下:
  • if [ "$1" = "--gf" ];then
    ${BASH_ALIASES[startglassfish]};
    fi
    

    关于bash - 等于和不等于运算符在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70019759/

    相关文章:

    bash - 仅 Rsync 特定文件和包含这些文件的目录

    networking - Hadoop 节点在一段时间后死亡(崩溃)

    php - 如何在 ubuntu 机器上安装 oracle instantclient 和 pdo_oci?

    c# - 如何在c#中比较两个字典并在验证后获得输出为True和False

    .net - IronPython 与原始 Python 的比较。我对第一个有什么期望?

    PHP语法问题

    bash - ssh bash从远程文件接收变量

    linux - awk 没有使用 bash 变量

    bash - FFMPEG批量转换,然后创建文件夹

    通过 Internet 连接时,Apache 尝试连接到本地网络