Terminal Freitag: Bash [Schlüsselerweiterung]

Zunächst möchte ich mich entschuldigen, da ich letzten Freitag den Beitrag nicht schreiben konnte. Heute werde ich ein Extra hinzufügen, um den verlorenen Tag auszugleichen. 🙂

Klammererweiterung

Auf Spanisch scheint mir die Schlüsselerweiterung eine Funktion zu sein, die von inspiriert ist C-SchaleDies erzeugt Kombinationen zwischen den Zeichen, die in geschweiften Klammern eingegeben werden. Die Reihenfolge ist von links nach rechts. Es ist überhaupt nicht kompliziert, aber es ist eine Option, die bei unseren Touren durch GNU / Linux sehr nützlich sein wird.

Beispiel:

$ echo a {1,2,3} a1 a2 a3

Bei Verwendung mit Kommas (,) generiert Kombinationen zwischen dem Wert a und den Werten in geschweiften Klammern. Wenn es keinen Wert außerhalb der Schlüssel gäbe, würde jeder Wert, den der Schlüssel enthält, nur einmal angezeigt.

$ echo {a, b, c} abc

Die Verwendung ist überhaupt nicht komplex. Es gibt weitere häufigere Beispiele, z. B. das Erstellen vieler Verzeichnisse in einem Ordner

$ mkdir ~ / Jobs / {eins, zwei, drei, vier, fünf}

Dadurch werden fünf Ordner im Jobordner erstellt. Es ist so, als würden Sie jeweils einen Befehl eingeben. Erstellen der 5 Verzeichnisse.

Es gibt eine Erweiterung um zwei Punkte .. Dadurch wird eine Reihe von Zahlen oder Zeichen erstellt, die vom Anfangswert bis zum Endwert reichen. Verwenden Sie keine mit Buchstaben versehenen Zahlen.

$ echo {1..5} #Correct 1 2 3 4 5 $ echo {a..f} #Correct abcdf $ echo {a..5} #Incorrect {a..5} #Ich denke, ich werde es nie bekommen an diese blaue Farbe im Buchstaben gewöhnt

Wir können Zeit sparen, indem wir einen Zyklus erstellen für

# Statt $ for zu schreiben ((i = 1; i <= 5; i ++)); Echo "Meine Nummer $ i"; erledigt Meine Nummer 1 Meine Nummer 2 Meine Nummer 3 Meine Nummer 4 Meine Nummer 5 # Code mit Klammererweiterung speichern. $ für i in {1..5}; do echo "Meine Nummer $ i; done Meine Nummer 1 Meine Nummer 2 Meine Nummer 3 Meine Nummer 4 Meine Nummer 5 # Natürlich ist die Verwendung gültig, obwohl die Ausgabe unterschiedlich ist. $ echo" Meine Nummer "{1..5} Meine Nummer 1 Meine Nummer 2 Meine Nummer 3 Meine Nummer 4 Meine Nummer 5

Nun, ich denke, das Konzept ist klar, haha, jetzt werde ich nur kommentieren, dass es kombinierbar und verschachtelt ist. Was meine ich damit?
Mit kombinierbar, mit dem wir einen oder mehrere Schlüssel verbinden können

$ echo {a..c} {1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3

Bei der Verschachtelung können sich viele Erweiterungsschlüssel in Erweiterungsschlüsseln verwenden

$ echo {a, c {1..3}, d} a c1 c2 c3 d

Und schließlich von Bash NICHTS Es ist möglich, die Werte zu erhöhen.

$ echo {0..20..2} 0 2 4 6 8 10 12 14 16 18 20

Das ist alles für heute, also danke, dass du mir Leute vorgelesen hast 🙂

Extra

So erstellen Sie einen lokalen Bin

Wenn ich a sage Kasten lokal Ich meine ein Verzeichnis, in dem wir unsere eigenen Skripte haben und es möglich ist, sie als einfachen Befehl auszuführen ...

Dies zu erreichen ist relativ einfach. Als erstes müssen Sie ein Verzeichnis erstellen, in dem die Skripte gespeichert werden.

mkdir ~ / .bin # In diesem Beispiel wird es ausgeblendet

Jetzt haben wir unseren Ordner zum Speichern der Skripte, aber es wird nicht funktionieren, bis wir den Pfad der neuen .bin zu $ ​​PATH hinzufügen
Dazu wird die Datei bearbeitet bash_profileund die Zeile wird hinzugefügt.

export PATH = $ PATH: ~ / .bin

Und voila, das reicht aus, um einen lokalen Bin zu erstellen. Natürlich werden Root-Berechtigungen angefordert, falls dies für ein Beispiel erforderlich ist, in dem wir ein schnelles Skript schreiben.

#! / bin / bash echo "Hallo $ 1, wie geht es dir?"

Speichern Sie es mit dem Namen Hallo
Das Skript erhält eine Ausführungsberechtigung und reicht nur aus, um es vom Terminal aus aufzurufen

$ hallo wada # Dies zeigt die Nachricht Hallo wada, wie geht es dir?

Mit diesem schnellen Trick können Sie Ihre Skripte also schneller ausführen

Das ist alles für heute Menschen, denen es gut geht 🙂
PS Entschuldigung für Fehler, wenn es welche gibt, schließen sich meine Augen bereits hahaha 😀


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Dhunter sagte

    Ich bin schon lange in der Bash-Ausgabe und hatte die Klammererweiterungen nicht verstanden, danke.

    In Bezug auf den Pfad-Trick macht Fedora standardmäßig so etwas, aber in "~ / .local / bin" sehen Sie sich einen Ausschnitt des bash_profile an, den ich zu Jessie gebracht habe.

    PATH = $ PATH: $ HOME / .local / bin: $ HOME / bin
    PATH exportieren

    1.    Ricardo sagte

      Ich habe einige Bedenken:
      1. Wie bringe ich ihn dazu, mir zwei Intervalle mit Punkterweiterung zu geben? Alter {1..24,55..90} und dass ich Alter von 1 bis 24 erweitern und mit 55 bis XNUMX fortfahren. wie ich es tat hat es nicht funktioniert. Warum?

      2. Wenn der erste Wert null sein soll, fahren Sie mit der Nummerierung fort:
      wget: http://manga.favorito /Bild http://manga.favorito/imagen1
      Ich habe den folgenden Weg versucht, aber wget hat nicht bekommen: http://manga.favorito/imagen{, 1..42} Meiner Meinung nach müsste ich den Vornamen ohne Nummer lassen und mit der Nummerierung von 1 bis 42 fortfahren, aber das war nicht so. Warum?

    2.    Wada sagte

      Sie haben Recht, einige Distributionen haben oder hatten eine .bin, aber es ist so, dass jeder verstehen und sehen kann, dass es möglich ist, dies in jeder Distribution zu tun: D, Danke, dass Sie vorbeischauen.

  2.   Demo sagte

    Sehr gut, sehr gut für diese Wissensbeiträge zur Linux-Welt und ihrer Sicherheit. Ich hoffe, ich konnte an einem Freitag lesen, wie man ein Pendrive in einem Terminal formatiert und ein ISO-DVD / CD-Image eines beliebigen freien Systems in einem Terminal brennt.

    1.    Wada sagte

      Danke für deine Worte, Bruder. Ich verspreche, dass ich nächsten Freitag diesen Beitrag machen werde. Und ich muss eine über das Anpassen von Vim hahaha, aber ich wollte nicht, dass sie denken, dass es nur Vim umfassen würde.

  3.   edoardo_oder sagte

    Ausgezeichneter Terminalartikel, der beste, den ich seit langem gelesen habe, einschließlich mehrerer Blogs, die Tutorials dieses Stils veröffentlichen. Vielen Dank!!

    1.    Wada sagte

      Vielen Dank 😀 Ich werde versuchen mitzuhalten.

  4.   Juanli sagte

    Hervorragender Tipp für den örtlichen Mülleimer!
    Viele Grüße!

    1.    Wada sagte

      Ausgezeichnet, toll, dass es dir nützlich ist, vielen Dank, dass du Bruder 😀 verstorben bist

  5.   giskard sagte

    Sehr gut! Keine Ahnung davon. Danke 🙂

    1.    Wada sagte

      Gern geschehen, Bruder, danke, dass du dir die Zeit genommen hast, es zu lesen 😀

  6.   Ricardo sagte

    Ich habe einige Bedenken:
    1. Wie bringe ich ihn dazu, mir zwei Intervalle mit Punkterweiterung zu geben? Alter {1..24,55..90} und dass ich Alter von 1 bis 24 erweitern und mit 55 bis XNUMX fortfahren. wie ich es tat hat es nicht funktioniert. Warum?

    2. Wenn der erste Wert null sein soll, fahren Sie mit der Nummerierung fort:
    wget: http://manga.favorito/imagen http://manga.favorito/imagen1

    Ich habe den folgenden Weg versucht, aber wget hat nicht bekommen: http://manga.favorito/imagen{, 1..42} Meiner Meinung nach müsste ich den Vornamen ohne Nummer lassen und mit der Nummerierung von 1 bis 42 fortfahren, aber das war nicht so. Warum?
    * Entschuldigung, aber ich habe den ersten Beitrag als Antwort angegeben und er war in einigen Teilen falsch

    1.    Wada sagte

      1.- Deine Logik ist falsch, du musst sie verschachteln, hahaha, versuche es mit $ echo {{1..24},{55..90}}

      2.- Wie der vorherige ... $ echo "URL"{,{1..42}}

      Mach dir keine Sorgen, Bruder, wir sind hier, um uns zu helfen 🙂

  7.   jvk85321 sagte

    Um das for durch echo zu ersetzen, würde es so aussehen

    Echo "Meine Nummer" {1..5} $ '\ n' | sed -e: a -e '$! N; s / \ n / \ n /; ta' | sed -e: a -e '$! N; s / 5 \ n / 5 /; ta'

    aber ich bevorzuge printf

    printf "I, I% d \ n" {1..5}

    und verwenden Sie das gleiche Konzept der Schlüsselerweiterung

    Atte
    jvk85321

    1.    jvk85321 sagte

      Wie setzen Sie die Klemmenkästen ????

      Atte
      jvk85321

  8.   jvk85321 sagte

    Testen, ob das Code-Tag funktioniert
    hehe

    Um das for durch echo zu ersetzen, würde es so aussehen

    echo “Mi numero “{1..5}$’\n’ | sed -e :a -e ‘$!N;s/\n /\n/;ta’ | sed -e :a -e ‘$!N;s/5\n/5/;ta’

    pero prefiero printf

    printf “Mi numero %d\n” {1..5}

    und verwenden Sie das gleiche Konzept der Schlüsselerweiterung

    Atte
    jvk85321

    1.    jvk85321 sagte

      Ich habe einige Fehler, aber es hat funktioniert

      Ich lebe Maluco

      Entschuldigung für die Störung

      Atte
      jvk85321

      1.    Wada sagte

        Hahaha, du hast dir selbst geantwortet, aber wenn es zwischen den Labels liegt kein Platz ...

        Und bei der Ersetzung der für ist es nicht notwendig, so viel Pipe hahahaha genug zu tun mit:
        echo -e "Mi numero "{1..5}"\n\b"

        Um ehrlich zu sein, ist printf der beste Weg, um Text in Skripten zu drucken. Es ist portabler, verwendet aber traditionell Echo.

      2.    Wada sagte

        Ich nehme die Räume! hahahahaha

        mal sehen 😀

      3.    Wada sagte

        Scheiße, es ist "kleiner als" Code größer als "" kleiner als "/ Code" größer als "hahahaha

      4.    jvk85321 sagte

        Das Problem, dass echo -e nicht Standard ist, funktioniert daher nicht auf allen Systemen.

        Kommt auch chaotisch raus
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5

        jvk@jvktos:~$
        Und damit
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Ich denke, der zweite präsentiert das Ergebnis besser, hahaha

        Atte
        jvk85321

      5.    jvk85321 sagte

        Diese Labels sind ein Mist, hehehe, mal sehen, ob sie jetzt funktionieren
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Und damit
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Ich denke, der zweite präsentiert das Ergebnis besser, hahaha
        Atte
        jvk85321

      6.    jvk85321 sagte

        Wie auch immer, lass die Leerzeichen zwischen den Zeilen, deshalb hasse ich HTML, hahahaha

  9.   Joaquin sagte

    Ausgezeichnet! Ich klatsche in deine Füße haha

    Ich wusste nicht, dass Schlüssel verschachtelt werden können, da ich sie auch nie ausprobiert habe, es spart wirklich viel Code und ist auf diese Weise auch besser lesbar. Vielen Dank!

    1.    Wada sagte

      Vielen Dank für Ihren verstorbenen Bruder, ich bin froh, dass es nützlich war

      1.    Joaquin sagte

        Gern geschehen, dafür sind wir hier, um Ideen auszutauschen und einzubringen. Ich weiß nicht, wie man programmiert, ich habe nur ein paar Dinge in Bash gemacht und in zwei Posts einige Skripte veröffentlicht, die ich gemacht habe. Ich denke, dies zu wissen kann das Verständnis von Code erleichtern.