Heim php教程 PHP开发 Shell-Programmierung: Bash Space Things

Shell-Programmierung: Bash Space Things

Nov 23, 2016 pm 12:57 PM
shell

Verstehen Sie zunächst, wann Sie Leerzeichen in der Bash verwenden sollten und wann nicht.

1. Auf beiden Seiten der Gleichheitszeichenzuweisung dürfen keine Leerzeichen stehen.

2. Zwischen Befehlen und Optionen sind Leerzeichen erforderlich.

3 sind optional

Werfen wir einen Blick auf häufige Probleme

1. Bei der Zuweisung gibt es zusätzliche Leerzeichen auf beiden Seiten des Gleichheitszeichens oder nur auf der linken Seite
test@pythontab. com ~ $ var1 = test
bash: var1: Befehl nicht gefunden
test@pythontab.com ~ $ echo ${var1:?error}
bash: var1: error
test@pythontab.com ~ $ echo ${var1?error}
bash: var1: error
test@pythontab.com ~ $ var2 =test
bash: var2: Befehl nicht gefunden
test@pythontab.com ~ $ echo ${var2:?error}
bash: var2: error
test@pythontab.com ~ $ echo ${var2?error}
bash: var2: error

Hier habe ich verwendet Bash-Variablenerweiterung, ${var1:?error}, wenn var1 nicht gesetzt oder null (undefiniert oder leer) ist, wird der angegebene Fehler gemeldet. ${var1?error}Wenn var1 nicht gesetzt ist, wird der angegebene Fehler gemeldet. Den Ausführungsergebnissen nach zu urteilen: Wenn auf der linken Seite des Gleichheitszeichens ein Leerzeichen steht, wird der Variablenname als Befehl ausgeführt und das Ergebnis ist „Befehl nicht gefunden“ und der Variablen wird kein Wert
2. Beim Zuweisen eines Werts ist auf der linken Seite des Gleichheitszeichens kein Leerzeichen und auf der rechten Seite ein Leerzeichen (Diese Situation ist etwas speziell, Sie werden zwei Situationen finden)
test@pythontab .com ~ $ var= test
test@pythontab.com ~ $ var= nocmd
bash: nocmd: Befehl nicht gefunden

Rechts neben dem Gleichheitszeichen befindet sich auch ein Leerzeichen Der erste Befehl meldet keinen Fehler, der zweite Befehl jedoch.

Das liegt daran, dass es eine solche Möglichkeit gibt, Befehle in der Shell auszuführen: var=string command

Der Befehl command erhält den Wert der Variablen var (ob der Wert der Variable var wird nach der Ausführung des Befehls beibehalten. Sie wird in bash4 beibehalten, aber sie wurde beibehalten, als ich sie in Dash fand. Da test ein Befehl ist und nocmd nicht, habe ich berichtet Befehl nicht gefunden.
test@ pythontab.com ~ $ var=newtest eval echo $var
newtest
test@pythontab.com ~ $ echo $var

Hinweis: Ich habe hier eval verwendet Um den ersten Fehler zu vermeiden, wird beim Parsen $var durch eine leere Zeichenfolge ersetzt. Andernfalls tritt die folgende Situation auf (das Folgende ist die falsche Testmethode. Bevor Echo ausgeführt wird, wurde $var durch eine leere Zeichenfolge ersetzt) ​​

Code wie folgt:
test@pythontab.com ~ $ var=newtest echo $var
test@pythontab.com ~ $ echo $var

An diesem Punkt glaube ich, dass es jeder versteht Für das Gleichheitszeichen dürfen auf der linken und rechten Seite keine Leerzeichen stehen, aber das ist definitiv nicht das gewünschte Ergebnis.

3. Zwischen dem Befehl und der Option muss ein Leerzeichen stehen

Jeder scheint das zu verstehen, warum bin ich immer noch so wortreich? Apropos, ich muss einen ganz besonderen Befehl erwähnen: [Befehl (Sie haben richtig gelesen, es ist [), das ist der Testbefehl (natürlich ist dies in Bash ein integrierter Befehl, aber er hat keine Auswirkungen

unser Verständnis). Vielleicht kommt Ihnen der [Befehl bekannt vor, ja, ich garantiere Ihnen, dass Sie ihn gesehen haben, schauen Sie sich das folgende Beispiel an
test@pythontab.com ~ $ if [ "abc" = "abc" ]; 'sie sind gleich'; fi
sie sind gleich
test@pythontab.com ~ $ type -a [
[ ist eine eingebaute Shell
[ ist /usr/bin/[

Erinnern Sie sich? [Befehle werden oft in if-Urteilen verwendet. Natürlich schreiben manche Leute gerne so:
test@pythontab.com ~ $ [ "abc" = "cba" ] || >sie sind nicht gleich
test@pythontab.com ~ $ type -a [
[ ist eine eingebaute Shell
[ ist /usr/bin/[

[ Der Befehl wird aufgerufen Testbefehl, beide sind fast gleich, warum also nicht genau gleich? Werfen wir einen Blick darauf
test@pythontab.com ~ $ [ "abc" = "cba"
bash: [: fehlendes `]'
test@pythontab.com ~ $ [ "abc" = "cba " ]
test@pythontab.com ~ $ test "abc" = "cba" ]
bash: test: zu viele Argumente
test@pythontab.com ~ $ test "abc" = "cba „

Um es klarzustellen: Wenn Sie den [Befehl, müssen Sie ihm einen Schwanz geben] verwenden, können Sie bei Verwendung des Testbefehls keinen Schwanz hinzufügen. Tail] ist [der letzte Parameter, ein unverzichtbarer Parameter, der das Ende des Befehls darstellt

So viel ist gesagt, was hat das mit Leerzeichen zu tun? Um es allen verständlich zu machen, möchte ich zunächst Folgendes sagen: [Es handelt sich um einen Befehl in der Shell, und um ihn herum müssen Leerzeichen stehen! ] ist der letzte unverzichtbare Parameter von [, der ebenfalls Leerzeichen auf beiden Seiten erfordert (obwohl die Parameter einiger Befehle miteinander verbunden werden können, wie z. B. ps, der Befehl [ jedoch nicht, es müssen Leerzeichen zwischen seinen Parametern stehen). Werfen wir einen Blick auf [häufige Fehler

a. Fehlendes Leerzeichen zwischen if und [
test@pythontab.com ~ $ if[ "$HOME" = "/home/igi"];then echo ' equal'; fi
bash: Syntaxfehler bei unerwartetem Token `then'
test@pythontab.com ~ $ if[ "$HOME" = "/home/igi" ];then echo 'equal'; 🎜>bash: Syntaxfehler bei unerwartetem Token `then'
test@pythontab.com ~ $ if["$HOME" = "/home/igi"];then echo 'equal'; fi
bash : syntax Fehler in der Nähe des unerwarteten Tokens `then'
test@pythontab.com ~ $ if["$HOME" = "/home/igi" ];then echo 'equal'; fi
bash: Syntaxfehler in der Nähe des unerwarteten Tokens ` dann'

Syntaxanalysefehler, offensichtlich, wenn[ Für Bash weiß ich nicht, was zum Teufel ist

b Es fehlt ein Leerzeichen zwischen [ und den folgenden Parametern
test@pythontab.com ~ $ if [" $HOME" = "/home/igi" ];then echo 'equal'; fi
bash: [/home/igi: Keine solche Datei oder kein solches Verzeichnis
test@pythontab.com ~ $ if [ "$HOME" = "/home/igi"];dann echo 'equal'; fi
bash: [/home/igi: Keine solche Datei oder kein solches Verzeichnis

["$HOME" Für bash, Ich weiß auch nicht, was zum Teufel es ist

c Es gibt einen Platzmangel zwischen den Parametern zwischen [ ]
test@pythontab.com ~ $ if [ "abc"="abc" ] ; then echo 'equal' ; fi
equal
test@pythontab.com ~ $ if [ "abc"="cba" ]; then echo 'equal'; Der erste Befehl scheint richtig zu sein (eigentlich ist es nur ein Zufall). Schauen Sie sich den zweiten Befehl an. „abc“ und „cba“ sind offensichtlich unterschiedlich, werden aber als gleich beurteilt. Dies liegt daran, dass zwischen den Parametern kein Platz vorhanden ist und der Befehl [den internen Wert nur als Wert betrachtet. Werfen Sie einen Blick auf den folgenden Befehl und Sie werden erleichtert sein
test@pythontab.com ~ $ if [ 0 ], then echo 'equal'; "1" ]; then echo 'equal'; fi
equal
test@pythontab.com ~ $ if [ "" ]; then echo 'equal'; [ ] ; then echo 'equal'; fi

Wenn es in [ ] nur einen Wert gibt (die aufgrund fehlender Leerzeichen werden auch gezählt), ist es wahr, wenn es sich nicht um eine leere Zeichenfolge handelt . Daher müssen die Parameter zwischen [ ] auch Leerzeichen auf beiden Seiten haben und können nicht übereinander gestapelt werden

d Es fehlt an Leerzeichen zwischen Parametern und Ende]

Dies wird nicht wortreich sein , tail] Es ist auch der Parameter von [Befehl. Wie oben erwähnt, müssen zwischen Parametern Leerzeichen stehen

Es wird so viel über [Befehl und Leerzeichen] gesprochen, aber manchmal kann es auch ohne Leerzeichen korrekt ausgeführt werden. Das sind natürlich nur Sie. Viel Glück, werfen wir einen Blick darauf
test@pythontab.com ~ $ var=' abc'
test@pythontab.com ~ $ if [$var = "abc" ]; then echo 'equal'; fi
equal
test@pythontab.com ~ $ if ["$var" = "abc" ];then echo 'equal'; fi
bash: [ abc: command not gefunden

double Was in Anführungszeichen eingeschlossen ist, ist ein Ganzes, und wenn keine doppelten Anführungszeichen vorhanden sind, werden die Leerzeichen oder Tabulatoren vor und nach der Zeichenfolge abgeschnitten. Wenn Sie darauf stoßen oder absichtlich Leerzeichen oder Tabulatoren vor und nach der Zeichenfolge verwerfen möchten, ist dies nicht unmöglich, es wird jedoch dringend davon abgeraten, dies zu schreiben, da Ihr Code dadurch sehr fragil wird.

Oder Sie haben alle Leerzeichen hinzugefügt, die Sie hinzufügen sollten, erhalten aber immer noch eine Fehlermeldung. Dies kann auch daran liegen, dass doppelte Anführungszeichen fehlen. Diese Situation kommt sehr häufig vor. Werfen Sie schließlich einen Blick auf
test@pythontab.com ~ $ var=''
test@pythontab.com ~ $ if [ "$var" = "abc" ];then echo 'equal'; fi
test@pythontab.com ~ $ if [ $var = "abc" ];then echo 'equal'; fi
bash: [: =: unärer Operator erwartet
test@pythontab .com ~ $ dvar='a b c'
test@pythontab.com ~ $ if [ $dvar = "a b c" ];then echo 'equal'; fi
bash: [: too much arguments
test@ pythontab.com ~ $ if [ "$dvar" = "a b c" ];then echo 'equal'; fi
equal

Ich werde mich noch einmal ausführlich äußern, lassen Sie die doppelten Anführungszeichen nicht weg leicht. Ist es klar? Wenn Sie es immer noch nicht verstehen,

Abschließend werde ich keinen Unsinn über die optionalen Leerzeichen auf beiden Seiten des Rohrs reden, denn ich habe niemanden getroffen, der daran Zweifel hat.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie installiere ich Classic Shell unter Windows 11? Wie installiere ich Classic Shell unter Windows 11? Apr 21, 2023 pm 09:13 PM

<p>Die Anpassung Ihres Betriebssystems ist eine großartige Möglichkeit, Ihren Alltag angenehmer zu gestalten. Sie können die Benutzeroberfläche ändern, benutzerdefinierte Designs anwenden, Widgets hinzufügen und mehr. Deshalb zeigen wir Ihnen heute, wie Sie ClassicShell unter Windows 11 installieren. </p><p>Dieses Programm gibt es schon seit langer Zeit und ermöglicht es Ihnen, das Betriebssystem zu ändern. Mittlerweile haben Freiwillige die Leitung der Organisation übernommen, die sich 2017 auflöste. Das neue Projekt heißt OpenShell und ist derzeit für Interessierte auf Github verfügbar. </p>&a

Die PowerShell-Bereitstellung schlägt fehl und das HRESULT 0x80073D02-Problem wurde behoben Die PowerShell-Bereitstellung schlägt fehl und das HRESULT 0x80073D02-Problem wurde behoben May 10, 2023 am 11:02 AM

Wird beim Ausführen des Skripts in PowerShell die Fehlermeldung „Add-AppxPackage: Bereitstellung fehlgeschlagen mit HRESULT: 0x80073D02, Das Paket kann nicht installiert werden, da die von ihm geänderte Ressource derzeit verwendet wird. Fehler 0x80073D02...“ angezeigt? Wie in der Fehlermeldung angegeben, tritt dies auf, wenn der Benutzer versucht, eine oder alle WindowsShellExperienceHost-Anwendungen erneut zu registrieren, während der vorherige Prozess ausgeführt wird. Wir haben einige einfache Lösungen, um dieses Problem schnell zu beheben. Fix 1 – Beenden Sie den Experience-Host-Prozess, den Sie beenden müssen, bevor Sie den Powershell-Befehl ausführen

Hier sind die Korrekturen für das Problem, dass Open Shell Windows 11 nicht funktioniert Hier sind die Korrekturen für das Problem, dass Open Shell Windows 11 nicht funktioniert Apr 14, 2023 pm 02:07 PM

Open Shell, das unter Windows 11 nicht läuft, ist kein neues Problem und plagt Benutzer seit der Einführung dieses neuen Betriebssystems. Die Ursache für das Problem, dass Open-Shell Windows 11 nicht funktioniert, ist nicht spezifisch. Dies kann durch unerwartete Fehler in Programmen, das Vorhandensein von Viren oder Malware oder beschädigte Systemdateien verursacht werden. Für diejenigen, die es nicht wissen: Open-Shell ist der Ersatz für Classic Shell, das 2017 eingestellt wurde. Sie können sich unser Tutorial zur Installation von Classic Shell unter Windows 11 ansehen. So ersetzen Sie das Startmenü von Windows 11

Explorer.exe startet beim Systemstart nicht [Fix] Explorer.exe startet beim Systemstart nicht [Fix] Jun 03, 2023 am 08:31 AM

Heutzutage stoßen viele Windows-Benutzer auf schwerwiegende Windows-Systemprobleme. Das Problem besteht darin, dass Explorer.exe nach dem Laden des Systems nicht gestartet werden kann und Benutzer keine Dateien oder Ordner öffnen können. Allerdings können Windows-Benutzer in einigen Fällen den Windows Explorer manuell über die Eingabeaufforderung öffnen und müssen dies bei jedem Systemneustart oder nach dem Systemstart tun. Dies kann problematisch sein und ist auf die folgenden Faktoren zurückzuführen. Beschädigte Systemdateien. Aktivieren Sie die Schnellstarteinstellungen. Veraltete oder problematische Anzeigetreiber. An einigen Diensten im System wurden Änderungen vorgenommen. Geänderte Registrierungsdatei. Unter Berücksichtigung aller oben genannten Faktoren haben wir einige gefunden, die den Benutzern sicherlich helfen werden

So löschen Sie schnell die Zeile am Ende einer Datei unter Linux So löschen Sie schnell die Zeile am Ende einer Datei unter Linux Mar 01, 2024 pm 09:36 PM

Bei der Verarbeitung von Dateien unter Linux-Systemen ist es manchmal erforderlich, Zeilen am Ende der Datei zu löschen. Dieser Vorgang kommt in praktischen Anwendungen sehr häufig vor und kann durch einige einfache Befehle erreicht werden. In diesem Artikel werden die Schritte zum schnellen Löschen der Zeile am Ende der Datei im Linux-System vorgestellt und spezifische Codebeispiele bereitgestellt. Schritt 1: Überprüfen Sie die letzte Zeile der Datei. Bevor Sie den Löschvorgang durchführen, müssen Sie zunächst bestätigen, welche Zeile die letzte Zeile der Datei ist. Sie können den Befehl tail verwenden, um die letzte Zeile der Datei anzuzeigen. Der spezifische Befehl lautet wie folgt: tail-n1filena

Verschiedene Möglichkeiten, Shell-Skriptdateien unter Windows auszuführen Verschiedene Möglichkeiten, Shell-Skriptdateien unter Windows auszuführen Apr 13, 2023 am 11:58 AM

Windows-Subsystem für Linux Die erste Option ist die Verwendung des Windows-Subsystems für Linux oder WSL, einer Kompatibilitätsschicht für die native Ausführung binärer ausführbarer Linux-Dateien auf Windows-Systemen. Es funktioniert für die meisten Szenarien und ermöglicht Ihnen die Ausführung von Shell-Skripten in Windows 11/10. WSL ist nicht automatisch verfügbar, daher müssen Sie es über die Entwicklereinstellungen Ihres Windows-Geräts aktivieren. Sie können dies tun, indem Sie zu Einstellungen > Update & Sicherheit > Für Entwickler gehen. Wechseln Sie in den Entwicklermodus und bestätigen Sie die Abfrage mit Ja. Suchen Sie als nächstes nach W

Super-Hardcore! 11 sehr praktische Python- und Shell-Skriptbeispiele! Super-Hardcore! 11 sehr praktische Python- und Shell-Skriptbeispiele! Apr 12, 2023 pm 01:52 PM

Einige Beispiele für Python-Skripte: Unternehmens-WeChat-Alarme, FTP-Clients, SSH-Clients, Saltstack-Clients, vCenter-Clients, Abrufen der Ablaufzeit des SSL-Zertifikats für Domänennamen, Senden der heutigen Wettervorhersage und zukünftiger Wettertrenddiagramme: SVN-Vollsicherung; Zabbix überwacht den Ablauf des Benutzerkennworts, erstellt lokales YUM und die Anforderungen der Leser im vorherigen Artikel (wenn die Auslastung hoch ist, finden Sie heraus, welche Prozessskripte eine relativ hohe Auslastung belegen und Benachrichtigungen speichern oder pushen). Bitte haben Sie etwas Geduld. Am Ende des Artikels gibt es doch noch ein Easter Egg. Python-Skript ist Teil des WeChat-Alarms für Unternehmen. Dieses Skript verwendet die WeChat-Anwendung des Unternehmens, um einen WeChat-Alarm durchzuführen, und kann verwendet werden

So installieren Sie Open Shell, um das klassische Startmenü unter Windows 11 wiederherzustellen So installieren Sie Open Shell, um das klassische Startmenü unter Windows 11 wiederherzustellen Apr 18, 2023 pm 10:10 PM

OpenShell ist ein kostenloses Software-Dienstprogramm, mit dem Sie das Startmenü von Windows 11 so anpassen können, dass es einem Menü im klassischen Stil oder einem Menü im Windows 7-Stil ähnelt. Das Startmenü früherer Windows-Versionen bot Benutzern eine einfache Möglichkeit, den Inhalt ihres Systems zu durchsuchen. Im Grunde ist OpenShell ein Ersatz für ClassicShell, der verschiedene Benutzeroberflächenelemente bereitstellt, die dabei helfen, die Funktionalität der letzteren Version aus früheren Windows-Versionen zu übernehmen. Nachdem die Entwicklung von ClassicShell im Jahr 2017 eingestellt wurde, wurde es von GitHub-Freiwilligen unter dem Namen OpenShell gepflegt und weiterentwickelt. Es hängt mit Win zusammen

See all articles