Sua linha é:
val=$("$line" | wc -c)
Este tenta executar o comando dado por $line
e executar a saída através de wc -c
. A mensagem de erro exibida indica que ele está tentando executar um comando " hellounix
", como na primeira linha do seu arquivo. Se você quiser passar o valor da variável para o comando, use printf
:
val=$(printf '%s' "$line" | wc -c)
Se você estiver usando o Bash, o zsh ou outro shell mais poderoso, você também pode usar aqui strings :
val=$(wc -c <<<"$line")
<<<
executa a expansão na string "$line"
e depois a fornece como a entrada padrão de wc -c
.
Neste caso específico, no entanto, você pode usar a expansão do parâmetro do shell para obter o comprimento do valor da variável sem um pipeline:
val=${#line}
A expansão #
se expande para:
String Length. The length in characters of the value of parameter shall be substituted. If parameter is '*' or '@', the result of the expansion is unspecified. If parameter is unset and set -u is in effect, the expansion shall fail.