У меня проблема с извлеченным бельем из результата grep. Windows (gitBash) не может их сравнить, потому что число - это строка, а не число (моя macOS делает это без проблем).
То, что я хочу сделать: добавить ведущий ноль к номерам строк, если они меньше 10
Вот фрагмент кода:
local number=""
local command=""
# grep complete list and itereate over this list
grep -n --color=always "${1}" "${2}" | while read -r greppedList ; do
for ln in "${greppedList}" ; do
# split the line to number and command
number=$(echo ${ln} | cut -d ':' -f 1)
if (( ${number} < 10 )) ; then
command="${ln:2:${#ln}-1}"
else
command="${ln:3:${#ln}-1}"
fi
printWithFormattedLineNumbers "${number}" "${command}"
done
done
проблема в Windows заключается в этой строке if (( ${number} < 10 )) ; then.
Windows не может сравнить это, потому что это не число.
Можете ли вы помочь мне изменить способ получения белья?
while IFS=':' read num line, это не работало, если была только одна строка. Но самый важный факт был %02d - line %s\n' $num "$line"- это работает отлично. Спасибо!
readне сработала, попробуйте выполнить вырезку непосредственно в качестве аргументов printf grep -n --color=always "${1}" "${2}" | while read -r greppedList ; do printf 'number %02d - line %s\n' "$(cut -d':' -f1 <<<"$greppedList")" "$(cut -d':' -f2- <<<"$greppedList")" ; done. Я думаю, что printfлиния заменяет forцикл.
while IFS=':' read num line;do printf 'number %02d - line %s\n' $num "$line";done.