Ich möchte den Namen der Datei mithilfe eines Bash-Skripts oben an diese Datei anhängen

0

Ich möchte void mainfunction()am Anfang einer Datei hinzufügen . Ich lese den tatsächlichen Namen der Datei aus einer anderen Datei und den Namen der Hauptfunktion aus einer anderen Datei. Ich habe benutzt:

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

in dem der Name der Datei gespeichert ist name_cund in dem name_mainder Name der Hauptfunktion gespeichert ist . Dieser Befehl wird jedoch void $main_name()am Anfang der Datei angehängt. Wie kann ich das machen?

Diya
quelle
Diese Frage wäre besser für Unix & Linux Stack Exchange
ecnepsnai
Vielleicht Stackoverflow tatsächlich, Bash Scripting ist eine eigene "Sprache", Art
Xen2050

Antworten:

1

Sie müssen doppelte Anführungszeichen wie folgt verwenden:

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

Erläuterung

Betrachten Sie einfache Anführungszeichen:

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

Die Shell interferiert nicht mit Strings in Anführungszeichen. Sie werden sedunverändert weitergegeben. Daher wird die Literalzeichenfolge $name_mainin der Ausgabe angezeigt. Ebenso versucht dieser Befehl, auf den Dateinamen $name_cund nicht auf den durch den Wert dieser Shell-Variablen angegebenen Namen zu reagieren.

Betrachten Sie keine Anführungszeichen:

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

Ohne Anführungszeichen führt die Shell die Wortteilung durch. Dies kann alle Probleme verursachen. Ohne Anführungszeichen erwartet die Shell außerdem, dass Klammern eine Subshell starten. Das willst du auch nicht.

Bei doppelten Anführungszeichen wird die Shell-Variable ersetzt, die Wortteilung jedoch nicht. Hier ist es die richtige Wahl.

John1024
quelle