проверьте, является ли строка пустым ударом использования

Я пытаюсь сделать простое сравнение с проверкой, если строка является пустым ударом использования:

line=$(cat test.txt | grep mum )
if [ "$line" -eq "" ]
        then
        echo "mum is not there"
    fi

Но это не работает, это говорит: [: слишком много аргументов

Большое спасибо за Вашу справку!

16
задан Zenet 21 July 2010 в 03:57
поделиться

5 ответов

Вы также можете использовать переменную $? , для которой задан статус возврата команды. Таким образом, у вас будет:

line=$(grep mum test.txt)
if [ $? -eq 1 ]
    then
    echo "mum is not there"
fi

Для команды grep , если есть какие-либо совпадения, $? установлен в 0 (завершен без ошибок) и если совпадений нет $ ? равно 1.

26
ответ дан 22 October 2019 в 20:40
поделиться
if [ ${line:-null} = null ]; then
    echo "line is empty"
fi

или

if [ -z "${line}" ]; then
    echo "line is empty"
fi
8
ответ дан 22 October 2019 в 20:40
поделиться
grep "mum" file || echo "empty"
4
ответ дан 22 October 2019 в 20:40
поделиться
if line=$(grep -s -m 1 -e mum file.txt)
then
    echo "Found line $line"
else
    echo 'Nothing found or error occurred'
fi
4
ответ дан 22 October 2019 в 20:40
поделиться

Классический ответ sh, который также будет работать в bash:

if [ x"$line" = x ]
then
    echo "empty"
fi

Ваша проблема также может быть в том, что вы используете '-eq', который предназначен для арифметического сравнения.

5
ответ дан 22 October 2019 в 20:40
поделиться