Ваша основная проблема с командой sed
возникает из-за одинарных кавычек переменных в:
sed -n '$LINE_COUNT_OLD, $LINE_COUNT' ...
Когда вы одинарных кавычек переменныхВы предотвращаете расширение переменной оболочкой, поэтому sed
буквально видит:
sed -n '$LINE_COUNT_OLD, $LINE_COUNT' ...
, где он пытается разрешить буквальный диапазон $LINE_COUNT_OLD, $LINE_COUNT
из символов '$' 'L' 'I' 'N' 'E' '_' 'C' 'O' 'U' 'N' 'T' '_' 'O' 'L' 'D', ...
Чтобы исправить проблему, двойная кавычка переменные:
sed -n "$LINE_COUNT_OLD, $LINE_COUNT" ...
Далее у вас есть несколько мелочей, которые вы должны обновить.Во-первых, избегайте использования expr $LINE_COUNT - $LINE_COUNT_OLD
, который является устаревшим (и медленным) способом выполнения арифметики.Вместо этого используйте арифметические операторы $((LINE_COUNT - LINE_COUNT_OLD))
( примечание: $
разыменование переменных в $((..))
не требуется)
Далее, если вы не знаете точную причину не заключать в кавычки,Вы должны двойные кавычки всех переменных в bash, чтобы предотвратить разбиение слов .Особенно в пределах [...]
.В противном случае, если в вашей переменной есть пробелы, вы будете передавать неверное количество аргументов test
.Кроме того, также неплохо бы заключать в кавычки непеременные с [...]
, например -ne '0'
( одинарные кавычки здесь хорошо).
Наконец, избегайте использованияALLCAPS
имена переменных.Обычно они зарезервированы для использования оболочкой.