Пока игнорируем тот факт, что существуют инструменты, созданные именно для этой цели.
char_src=$1
char_dest=$2
shift
Вы, вероятно, хотите shift 2
здесь, простой shift
переместит $2
в $1
и оставит вас с тем, что там было первое имя файла.
while read -r line
Вы правильно используете read -r
, но обратите внимание, что по умолчанию IFS
read
удалит начальные и конечные пробелы.
done < "$file"
перенаправляет только вход, чтобы перенаправить и вывод, вам потребуется
> "$file2"
, и, как отмечалось во многих местах ( напримерздесь ), перенаправление на тот же файл просто усекает его перед чтением чего-либо.
Об инструментах, созданных для этого, чтобы изменить одиночные символы на другие одиночные символы, используйте tr
. Конструкция оболочки ${var//pat/repl}
заменяет целые строки и больше похожа на s/pat/repl/g
в sed
.