Как подсчитать количество строк в переменной bash, учитывая пустоту? - PullRequest
1 голос
/ 31 марта 2020

Мы знаем , как посчитать количество строк в переменной . Однако, как отмечается в комментариях и ответах, семантика является странной, когда речь идет о пустых переменных, поскольку пустая переменная обычно считается такой же, как непустая переменная без перевода строки:

$ echo -n "" | wc -l
0
$ echo -n "foo" | wc -l
0
$ echo "" | wc -l
1
$ echo "foo" | wc -l
1

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

Теперь в одном из ответов на этот вопрос предлагается частичный обходной путь:

printf "%s" "$a" | grep -c "^"

, но это не совсем то, что мне нужно, так как она считает непустую переменную, значение которой является новой строкой, с 0 строками.

Мой вопрос: кроме подсчета «регулярно», а затем явной проверки на случай пустоты, есть ли достойный способ получить такой счет в bash?

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

awk на помощь:

$ echo -n "foo" | awk 'END {print NR}'
1
$ echo -n "" | awk 'END {print NR}'
0
0 голосов
/ 31 марта 2020

Количество новых строк будет подсчитано следующим образом:

printf %s "$var" | tr -d -c '\n' | wc -c

Это будет работать во всех случаях, кроме случаев, когда в последней строке отсутствует символ новой строки.


Вы можете протестировать отдельно если переменная пуста, как это:

test -z "$var" && echo "var is empty"

test -n "$var" && echo "var is not empty"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...