Bash: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Zeile 77: | Zeile 77: | ||
</source> | </source> | ||
= Text einlesen (read) = | |||
<syntaxhighlight lang="bash"> | |||
read answer "= Say something" | |||
echo $answer | |||
</syntaxhighlight> |
Version vom 5. Dezember 2022, 06:10 Uhr
Links
Entfernen eines Präfixes
- Syntax: ${name#muster} oder ${name##muster}
- Wird am Anfang des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
- Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
- Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
X=Datei.01.txt ; echo "#:" ${X#*.} "##:" ${X##*.}
#: 01.txt ##: txt
Entfernen eines Suffixes
- Syntax: ${name%muster} oder ${name%%muster}
- Wird am Ende des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
- Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
- Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
X=Datei.01.txt ; echo "%:" ${X%.*} "%%:" ${X%%.*}
%: Datei.01 %%: Datei
Ersetzen eines Teilstrings
- Syntax: ${name/muster/ersetzung}
- Wird das Muster im Variablenwert gefunden, wird es einmal ersetzt.
- Sollen alle Teilstrings ersetzt werden gilt die Syntax:
- ${name//muster/ersetzung}
- Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
- '\' ist ESC-Zeichen: das folgende Zeichen wird nicht als Metazeichen interpretiert
X=Datei.01.txt ; echo ${X/Datei./artikel_}
UNIX_PATH=/abc/def ; WIN_PATH=${UNIX_PATH//\//\\} ; echo $WIN_PATH
artikel_01.txt \abc\def
Suchen eines regulären Ausdrucks
- Syntax: expr $name : <regex>
- expr liefert als Ergebnis 0, wenn der Ausdruck gefunden wurde, 1 wenn nicht.
- Hinweis: der reg. Ausdruck bezieht sich immer auf den Stringanfang, enthält also implizit einen "^".
- folgende Syntaxelemente habe ich gefunden:
- beliebig oft: "a*"
- maximal einmal: "a\?"
- mindestens einmal: "a\+"
- Anzahl Vorkommen "a\{1,5\}"
- Klammerung "\(T:)\?[0-9-]*"
- Alternativen: "affe\|gnu"
- Hinweis: expr gibt zusätzlich die Länge des gefundenen Ausdrucks aus, also nach /dev/null umleiten, wenn nicht gewünscht
X="ab2"
if expr $X : "[a-z][a-z0-9]* > /dev/null ; then
echo "X ist ein Identifier"
fi
Datei zeilenweise abarbeiten
function Example(){
local fnDiff=$1
local lines
local file=/tmp/dummy
mapfile -t <$file lines
local count=${#lines[@]}
local ix=0
while [ $ix -lt $count ]; do
local line=${lines[$ix]}
ix=$(expr $ix + 1)
done
}
Text einlesen (read)
read answer "= Say something"
echo $answer