Remova o $
da linha de atribuição dentro do loop. Você está tentando usar o valor como o nome da variável que está atribuindo, o que está causando um comportamento muito estranho.
Meu script deve receber entrada de um pipe e substituir caracteres de nova linha por vírgulas, usando a substituição de string do bash:
#! /bin/bash
read -d -r input
echo $input
$input=${input//\n/,}
echo $input
No entanto, em vez de substituir o caractere de nova linha, o bash tenta executar o primeiro padrão correspondente:
echo -e "this\nis\na\ntest\n" | test.sh
fornecerá a seguinte saída:
test.sh: line 5: this: command not found
e a variável $input
não é alterada. Aspas duplas ou simples também não ajudaram. Estou usando o bash versão 4.3.11 no Linux Mint.
Tags bash shell shell-script string