Проверьте, что строка пуста, используя bash
Я пытаюсь сделать простое сравнение, чтобы проверить, нет ли строки пустым с помощью bash:
line=$(cat test.txt | grep mum )
if [ "$line" -eq "" ]
then
echo "mum is not there"
fi
Но он не работает, он говорит: [: слишком много аргументов
Большое спасибо за вашу помощь!
Ответы
Ответ 1
Вы также можете использовать переменную $?
, которая настроена на статус возврата команды. Таким образом, у вас будет:
line=$(grep mum test.txt)
if [ $? -eq 1 ]
then
echo "mum is not there"
fi
Для команды grep
, если есть какие-либо соответствия $?
, установлено значение 0 (завершено чисто), и если нет совпадений $?
равно 1.
Ответ 2
if [ ${line:-null} = null ]; then
echo "line is empty"
fi
или
if [ -z "${line}" ]; then
echo "line is empty"
fi
Ответ 3
Классический ответ sh, который также будет работать в bash,
if [ x"$line" = x ]
then
echo "empty"
fi
Ваша проблема также может заключаться в том, что вы используете '-eq', который предназначен для арифметического сравнения.
Ответ 4
grep "mum" file || echo "empty"
Ответ 5
if line=$(grep -s -m 1 -e mum file.txt)
then
echo "Found line $line"
else
echo 'Nothing found or error occurred'
fi
Ответ 6
Я думаю, что наиболее ясное решение использует регулярное выражение:
if [[ "$line" =~ ^$ ]]; then
echo "line empty"
else
echo "line not empty"
fi
Ответ 7
Если вы хотите использовать PHP
с этим,
$path_to_file='path/to/your/file';
$line = trim(shell_exec("grep 'mum' $path_to_file |wc -l"));
if($line==1){
echo 'mum is not here';
}
else{
echo 'mum is here';
}