Evitar expansão de barra invertida com eco no traço

3

Primeiro, crie um arquivo com este conteúdo exato:

a\nb

Eu nomeei este arquivo foo , se eu executar o seguinte, ele imprime o conteúdo exato do arquivo:

bash -c 'bar=$(cat foo);echo "$bar"'

Mas se você executá-lo com sh em vez de bash , o resultado será:

a
b

O problema aqui é que \n está sendo traduzido para um novo caractere de linha que eu não quero.

Minha máquina padrão sh é dash , a máquina de destino está executando um linux embutido com ash builtin busybox , por isso é muito minimalista, funciona muito semelhante a dash not bash .

Se eu executar apenas sh -c 'cat foo' , obtenho o resultado esperado, mas quero dentro da variável, como eu poderia fazer isso?

    
por Tiago Pimenta 05.01.2015 / 00:34

1 resposta

4

Na verdade, o shell bifurca e executa o comando. Mas cada vez que um comando (que não é um built-in) é executado, o shell se bifurca. É assim que os cartuchos funcionam, e isso é inevitável.

Nota: o shell não traduz nada. O comando echo pode. Mas você pode usar printf :

your_shell -c 'bar=$(cat foo); printf %s "$bar"'
    
por 05.01.2015 / 00:47