Bash обнаружить 1-й входной параметр "отладка"? - PullRequest
1 голос
/ 13 июня 2019

Я хочу определить, является ли 1-й входной параметр bash «debug» (строка).

Я пишу сценарий так:

#! /usr/bin/env bash

if [ "$#" -eq "1" && "$1" -eq "debug" ]; then
    echo "hello debug"
fi

Сообщение об ошибке:

line 3: [: missing `]'

Не знаю почему, пожалуйста, помогите.

Ответы [ 2 ]

5 голосов
/ 13 июня 2019

Сравните строки с ==, -eq - арифметический оператор.Также в [] вы должны использовать оператор -a вместо && или разделить его на две части.Вот несколько разных способов написать одно и то же:

if [[ $# -eq 1 && "$1" == "debug" ]] ; then
    echo "hello debug"
fi
if [[ "$#" == "1" && "$1" == "debug" ]] ; then
    echo "hello debug"
fi
if [ "$#" == "1" ] && [ "$1" == "debug" ] ; then
    echo "hello debug"
fi
if [ "$#" == "1" -a "$1" == "debug" ] ; then
    echo "hello debug"
fi
2 голосов
/ 13 июня 2019

Вместо [ "$#" -eq "1" && "$1" -eq "debug" ] используйте либо [ "$#" -eq "1" ] && [ "$1" -eq "debug" ], либо [ "$#" -eq "1" -a "$1" -eq "debug" ].Проблема в том, что && - это способ сказать "и" в bash, а не -a, который является способом сказать "и" в тесте.Вы не можете использовать bash "и" внутри теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...