Как я могу протестировать, если строка пуста в сценарии оболочки?

У меня есть сценарий оболочки как это:

cat file | while read line
do
    # run some commands using $line    
done

Теперь я должен проверить, содержит ли строка какой-либо непробельный символ ([\n\t]), и в противном случае пропустите его. Как я могу сделать это?

30
задан planetp 5 April 2010 в 11:45
поделиться

4 ответа

Поскольку read по умолчанию считывает поля, разделенные пробелами, строка, содержащая только пробелы, должна приводить к присвоению переменной пустой строки, поэтому вы должны иметь возможность пропускать пустые строки с помощью всего:

[ -z "$line" ] && continue
62
ответ дан 27 November 2019 в 23:17
поделиться

bash:

if [[ ! $line =~ [^[:space:]] ]] ; then
  continue
fi

И используйте done вместо cat file | в то время как , если вы не знаете, зачем использовать последний.

5
ответ дан 27 November 2019 в 23:17
поделиться
if ! grep -q '[^[:space:]]' ; then
  continue
fi
2
ответ дан 27 November 2019 в 23:17
поделиться

cat Я бесполезен в этом случае, если вы используете цикл while read. Я не уверен, имели ли вы в виду, что хотите пропустить пустые строки или хотите пропустить строки, которые также содержат хотя бы пробел.

i=0
while read -r line
do
  ((i++)) # or $(echo $i+1|bc) with sh
  case "$line" in
    "") echo "blank line at line: $i ";;
    *" "*) echo "line with blanks at $i";;
    *[[:blank:]]*) echo "line with blanks at $i";;
  esac
done <"file"
2
ответ дан 27 November 2019 в 23:17
поделиться