Wie teile ich die Zeichenkette nach und vor dem Leerzeichen im Shell-Skript auf?

17

Ich habe eine Variable, die auf Echo wie folgt angezeigt wird

$ echo $var
129 148

Ich muss nur 129 als Ausgabe nehmen. Wie teile ich 129 und 148 auf?

surbhi
quelle
echo "${var% *}" && echo "${var#* }"...
Jasonwryan
Mögliches Duplikat von Wie funktionieren $ {0 ## * /} und $ {0% / *}?
Jasonwryan

Antworten:

30

Zusätzlich zu jasonwryans Vorschlag können Sie Folgendes verwenden cut:

echo $var | cut -d' ' -f1

Der obige cutS den echoAusgang mit einem Raumbegrenzungszeichen ( -d ' ') und gibt das erste Feld ( -f1)

Joseph R.
quelle
es funktioniert nicht. Ich habe es bereits benutzt. Der Befehl wurde nicht gefunden.
Surbhi
3
@surbhi Was sagt Befehl nicht gefunden? cutist ein Standarddienstprogramm. Ihr Skript hat wahrscheinlich irgendwo anders einen Fehler. Sagen Sie im Allgemeinen niemals „es funktioniert nicht“. Sagen Sie immer genau, welchen Code Sie ausgeführt haben, was genau passiert ist und kopieren Sie Fehlermeldungen.
Gilles 'SO - hör auf böse zu sein'
Diese Antwort sollte akzeptiert werden, da dies der prägnanteste und direkteste Weg ist. In Fällen, die komplizierter sind als das angegebene Beispiel, funktioniert das natürlich nicht.
Dan Nguyen
9

Eine gute Möglichkeit, dies zu tun, besteht darin, ein Bash-Array zu verwenden, um eine Zeichenfolge in Leerzeichen aufzuteilen. Sie können ein Array einfach mit eckigen Klammern deklarieren:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"
Gogoud
quelle
Hier steht, dass der Befehl nicht gefunden wurde
surbhi
Es hängt davon ab, ob Sie Bash verwenden. Wenn Sie eine andere Shell verwenden, funktioniert sie möglicherweise nicht. echo $SHELLsollte zeigen: /bin/bashoder ähnlich.
Gogoud
funktioniert nicht in zsh; (
TonyH
Dies funktioniert in ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH