Очень старая поведение. Но есть логика позади.
Bash
Читает строку скрипта по линии. Первый awk
Заявление просто пишет Skrypt.sh
файл новый, с тем же содержимым, потому что нечего заменить.
Второй awk
awk awk
с #awk
(одиночная замена). Итак, это добавляет один символ. Затем Bash
читает остальную часть файла. Смещение расположено в конце строки (со вторым awk
, строка 4). Но эта линия теперь немного дольше (один символ). Таким образом, Bash читает остальную часть линии, которая является одним H
. Это резьбу как команда (потому что мы находимся в скрипте
, и он заканчивается новой строкой). И H
, конечно, не является действительной командой, поэтому сообщение об ошибке.
Для достижения того, что вы хотите (кроме того, что ваш скрипт очень нестабилен) добавьте символ больше в конце строки 4, который нельзя интерпретировать как команду, пространство (), например.
Последнее, но не в последнюю очередь:
Вы не должны редактировать скрипты внутри себя.
Вместо этого можно использовать printf
:
printf 'total directories: %s\n' "$(find "$DIR" -type d | wc -l)"
printf 'total files: %s\n' "$(find "$DIR" -type f | wc -l)"
Обратите внимание, что это приведет к неправильному результату, если какие-либо каталоги или файлы будут содержать новую строку в своем имени.
Используйте что-то вроде этого:
echo "total directories: $(find "$DIR" -type d | wc -l)"
echo "total files: $(find "$DIR" -type f | wc -l)"