GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Echo-Neuzeilenzeichen funktioniert nicht in Bash

Die gemischte Geschichte von echo bedeutet, dass seine Standardoperation von Shell zu Shell unterschiedlich ist. POSIX gibt an, dass das Ergebnis von echo ist „implementierungsdefiniert“, wenn das erste Argument -n ist oder irgendein Argument enthält einen umgekehrten Schrägstrich.

Es ist zuverlässiger, printf zu verwenden (entweder als eingebauter Befehl oder als externer Befehl), wobei das Verhalten besser definiert ist:Die Backslash-Escapezeichen im C-Stil und Formatbezeichner werden in der Formatzeichenfolge (dem ersten Argument) unterstützt.

printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar

Sie können die Erweiterung von Backslash-Escape-Sequenzen von bash steuern ist echo eingebauter Befehl mit dem xpg_echo Shell-Option.

Setzen Sie es oben auf eine beliebige Bash Skript, um echo zu erstellen Backslash-Escapes automatisch erweitern, ohne dass -e hinzugefügt werden muss zu jedem Echo-Befehl.

shopt -s xpg_echo
echo 'foo\nbar'

Die empfohlene Vorgehensweise ist die Verwendung von printf für alle neuen Skripte.

printf '%s\n%s\n' "Hello" "World"

printf '%s\n' "Hello\nWorld"

Wenn Sie bash myfile.sh verwenden , Bash wird im "Batch"-Modus auf einem separaten ausgeführt verarbeiten, und nicht Lesen Sie sein Profil oder seine RC-Datei.

Wenn Sie . myfile.sh verwenden , die Datei ist bezogen durch den aktuellen Shell-Prozess (als ob sein Inhalt von Ihnen eingegeben worden wäre), daher sieht es Ihre aktuell definierten Aliase.

Im Allgemeinen ist es eine sehr schlechte Idee, Skripte zu schreiben, die von einer bestimmten Shell-Konfiguration abhängen, insbesondere Aliase, es sei denn, Sie definieren sie im Skript selbst. (Niemals Verlassen Sie sich auf .bashrc des Benutzers , auch wenn es Ihre eigene ist.)


Linux
  1. Verwenden von Case-Anweisungen in Bash

  2. printf:Befehl nicht gefunden

  3. Echo:Befehl nicht gefunden

  4. Bash/sh 'if else'-Anweisung

  5. bash sh - Befehl nicht gefunden

Bash-printf-Befehl

Array in Bash nicht gefunden

Zählererhöhung in Bash-Schleife funktioniert nicht

jp funktioniert nicht

fflush() funktioniert nicht unter Linux

Escape einem Sternzeichen (*) in der Bash