Echo einer Zeichenfolge mit einem Ausrufezeichen

8

Hier ist, was ich in Bash geschrieben habe und welche Ergebnisse ich über 'Echo' erzielt habe:

$ echo '!$'   
!$  
$ echo "!$"  
echo "'!$'"  
'!$'

Ich würde gerne wissen, wie 'Echo' mit der zweiten Eingabe umgeht. Es scheint mir, dass 'echo' zuerst die von Ihnen eingegebenen Zeichenfolgen druckt (bei Bedarf einige erweitern) und dann sicher ausführt, ob sie ausführbar sind.

Ein umwerfenderes Beispiel, das ich konstruieren kann, aber nicht verstehen kann, ist:

$ echo '!$'  
!$  
$ echo "!echo "!$""  
echo "echo '!$' "'!$'""  
echo '!$' !$
Buchsee
quelle

Antworten:

8

Im Befehl:

echo "!$"

!$wird erweitert, bashbevor vor übergeben echo. Wenn diese Option in doppelten Anführungszeichen aktiviert ist, wird die Verlaufserweiterung ausgeführt, sofern Sie nicht !mit einem umgekehrten Schrägstrich entkommen \. bashhatte die erweiterung gemacht, echomacht hier nichts, es druckt nur was es hat.

! $ verweist auf das letzte Argument des vorhergehenden Befehls, nämlich string '!$'.

In Ihrem zweiten Beispiel:

$ echo '!$'
!$
$ echo "!echo "!$""
echo "echo '!$' "'!$'""
echo '!$' !$

Befehl echo "echo '!$' "'!$'"", an die übergebene Argumente echosind in drei Teile unterteilt:

  • Erstens: "echo '!$' "erweitert zu Zeichenfolge echo '!$'.
  • Zweitens: '!$'erweitert auf Zeichenfolge !$.
  • Drittens: ""erweitert auf leere Zeichenfolge.
cuonglm
quelle
2

echo iteriert einfach seine Argumente und sendet sie an standard out.

Die ganze Magie wird von der Muschel ausgeführt: Die Muschel ersetzt ein Muster durch ein anderes. wie Variablen (beginnend mit $), Verlauf (beginnend mit !) usw.

Weitere bashInformationen finden Sie im Handbuch.

Strg-Alt-Delor
quelle