Ich habe die folgenden Zeilen geschrieben, um das letzte Zeichen einer Zeichenfolge zu erhalten:
str=$1
i=$((${#str}-1))
echo ${str:$i:1}
Es funktioniert für abcd/
:
$ bash last_ch.sh abcd/
/
Es funktioniert nicht fürabcd*
:
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.sh
Es listet die Dateien im aktuellen Ordner auf .
"${1: -1}"
das reicht also.echo "${str:$((${#str}-1)):1}"
. Auf diese Weise können Sie auch die zurückgegebenen nachfolgenden Zeichen variieren. Diese Arbeit für mich in Bash v4.1.0 (1)"${1:-1}
Per @perreal ist es wichtig, Variablen zu zitieren, aber weil ich diesen Beitrag ungefähr fünf Mal gelesen habe, bevor ich in den Kommentaren einen einfacheren Ansatz für die vorliegende Frage gefunden habe ...
Ausgabe:
/
Ausgabe:
*
Vielen Dank an alle, die oben daran teilgenommen haben. Ich habe im gesamten Thread entsprechend +1 hinzugefügt!
quelle
${std: -1}
, ohne den Platz funktioniert dies nicht. Ich bin darauf gestoßen und habe festgestellt, dass das${std:~0}
auch funktioniert (mit oder ohne Leerzeichen). Ich bin mir nicht sicher, ob dies ein dokumentiertes Verhalten ist, aber ich habe mich nicht darum gekümmert, es nachzuschlagen..sh
Skript nicht, wenn versucht wird, das abgerufene Zeichen einer Variablen zuzuweisen.declare LAST=$(echo "${str: -1}")
Dies führt zum Beispiel dazu, dass der böse rote Balken einen Syntaxfehler${str:0-1}
Ich weiß, dass dies ein sehr alter Thread ist, aber niemand hat erwähnt, was für mich die sauberste Antwort ist:
Beachten Sie,
-n
dass das Echo am Ende keine neue Zeile enthält.quelle
eine andere lösung mit awk script:
letzte 1 Zeichen:
letzte 5 Zeichen:
quelle
cat file | awk '{print substr($0,length,1)}'
Danke!Einzelne Zeile:
Jetzt:
quelle
echo "${str: -1}"
ist genug (beachten Sie den Abstand zwischen:
und-
).$((...))
.Jede Antwort impliziert bisher, dass das Wort "Shell" in der Frage Bash entspricht.
So könnte man das in einer Standard-Bourne-Shell machen:
quelle
echo -n
Wie von user5394399 vorgeschlagen, werden Probleme vermieden, wenn$str
Sonderformatzeichen enthalten sind.-n
Schalter ist ein Bashismus. Es wird in der Standard-Bourne-Shell nicht als Bindestrich usw. funktionieren. Das war der Punkt meiner Antwort.printf "%s" "$str" | ...
:-) behoben werden .Versuchen:
Zum Beispiel:
quelle
ist ein guter Ansatz
quelle