72 Stimmen

Versteckte Funktionen der Bash

Shell-Skripte werden oft als Klebstoff für die Automatisierung und einfache einmalige Aufgaben verwendet. Was sind Ihre bevorzugten "versteckten" Funktionen der Shell/Skriptsprache Bash?

  • Ein Merkmal pro Antwort
  • Geben Sie ein Beispiel und eine kurze Beschreibung der Funktion, nicht nur einen Link zur Dokumentation
  • Beschriften Sie das Merkmal mit einem fettgedruckten Titel in der ersten Zeile

Siehe auch:

13voto

th_in_gs Punkte 507

Umgang mit regulären Ausdrücken

Aktuelle Bash-Versionen bieten die Möglichkeit, reguläre Ausdrücke abzugleichen, so dass Sie dies tun können:

if [[ "mystring" =~ REGEX ]] ; then  
    echo match
fi

wobei REGEX ein roher regulärer Ausdruck in dem in man re_format beschriebenen Format ist.

Übereinstimmungen aus allen eingeklammerten Teilen werden im BASH_REMATCH-Array gespeichert, beginnend bei Element 1 (Element 0 ist die übereinstimmende Zeichenkette in ihrer Gesamtheit), so dass Sie dies auch für Regex-gestütztes Parsing verwenden können.

13voto

Robin Punkte 370

Ctrlx Ctrle

Dadurch wird der aktuelle Befehl in den in der Variablen VISUAL definierten Editor geladen. Dies ist sehr nützlich für lange Befehle wie einige der hier aufgeführten.

Um vi als Editor zu verwenden:

export VISUAL=vi

13voto

mihi Punkte 6211

Quick & Dirty-Korrektur von Tippfehlern (besonders nützlich für lange Befehle bei langsamen Verbindungen, bei denen die Verwendung des Befehlsverlaufs und das Scrollen durch ihn schrecklich wäre):

$ cat /proc/cupinfo
cat: /proc/cupinfo: No such file or directory
$ ^cup^cpu

Versuchen Sie auch !:s/old/new der den vorherigen Befehl einmal durch alt mit neu ersetzt.

Wenn Sie viele Vorkommen ersetzen wollen, können Sie eine globale Ersetzung mit !:gs/old/new .

Sie können die gs y s Befehle mit einem beliebigen Verlaufsereignis, z. B.

!-2:s/old/new

Zum Ersetzen old con new (einmal) im vorletzten Befehl.

10voto

André Punkte 12587

Hier zwei meiner Favoriten:

Um die Syntax zu überprüfen, ohne das Skript wirklich auszuführen, verwenden Sie:

bash -n script.sh

Zurück zum letzten Verzeichnis gehen (ja, ich kenne pushd und popd, aber das geht schneller)

cd -

8voto

JesperE Punkte 61161

Arrays:

#!/bin/bash

array[0]="a string"
array[1]="a string with spaces and \"quotation\" marks in it"
array[2]="a string with spaces, \"quotation marks\" and (parenthesis) in it"

echo "There are ${#array[*]} elements in the array."
for n in "${array[@]}"; do
    echo "element = >>${n}<<"
done

Weitere Details zu Arrays (und anderen fortgeschrittenen Bash-Skripten) finden Sie in der Leitfaden für fortgeschrittene Bash-Skripte .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X