Quero anexar o nome do arquivo no topo desse arquivo usando o script bash

0

Eu quero adicionar void mainfunction() no topo de um arquivo. Eu estou lendo o nome real do arquivo de outro arquivo e o nome da função principal de outro arquivo. Eu estava usando:

sed -i 1i void $name_main() $name_c 

em que o nome do arquivo é armazenado em name_c e o name_main armazena o nome da função principal. Mas esse comando está anexando void $main_name() na parte superior do arquivo. Como posso fazer isso?

    
por Diya 07.01.2015 / 05:19

1 resposta

1

Você precisa usar aspas duplas, assim:

sed -i "1i void $name_main()" "$name_c"

Explicação

Considere aspas simples:

sed -i '1i void $name_main()' '$name_c'

O shell não interfere nas strings entre aspas simples. Eles são passados para sed inalterado. Portanto, a string literal $name_main aparecerá na saída. Da mesma forma, este comando tentará atuar no nome do arquivo $name_c em vez do nome dado pelo valor dessa variável do shell.

Não considere citações:

sed -i 1i void $name_main() $name_c

Sem citações, o shell executará a divisão de palavras. Isso pode causar todos os problemas. Além disso, sem aspas, o shell espera que os parênteses iniciem uma subcamada. Você também não quer isso.

Com aspas duplas, a substituição da variável shell ocorrerá, mas a divisão de palavras não ocorrerá. É a escolha certa aqui.

    
por 07.01.2015 / 06:51