У меня проблема с извлеченным бельем из результата 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;do printf 'number %02d - line %s\n' $num "$line";done
.while IFS=':' read num line
, это не работало, если была только одна строка. Но самый важный факт был%02d - line %s\n' $num "$line"
- это работает отлично. Спасибо!read
не сработала, попробуйте выполнить вырезку непосредственно в качестве аргументов printfgrep -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
цикл.Ответы:
Затем обработайте его как строку символов и используйте
case
вместоif
:источник