O arquivo contém um caractere curinga (provavelmente *
) e, quando você faz eco, você não tem aspas duplas em torno da referência da variável $file
. Quando o shell expande uma referência de variável como essa, ele volta pelo valor e analisa várias coisas: espaços (tratados como separadores entre argumentos), curingas (que são substituídos pela lista apropriada de nomes de arquivos), etc. Colocando a variável referência dentro de aspas duplas evita essa análise extra. Em geral, é uma boa ideia colocar todas as referências de variáveis entre aspas duplas, a menos que você queira especificamente a análise extra por algum motivo.
BTW, eu também prefiro $()
sobre backquotes - eles fazem essencialmente a mesma coisa, mas a versão entre parênteses é muito mais fácil de ler. Além disso, nesse contexto, o bash permitirá que você pule o comando cat
e use apenas um redirecionamento <
(note que esse é um recurso somente bash, no entanto).
#!/bash/bin
file=$(</proc/net/arp)
echo "$file"