Ich habe eine Bash-Variable, $word
die manchmal ein Wort oder ein Satz ist, z.
word="tiger"
Oder:
word="This is a sentence."
Wie kann ich eine neue Bash-Variable erstellen, die nur dem ersten Buchstaben in der Variablen entspricht? Zum Beispiel wäre das Obige:
echo $firstletter
t
Oder:
echo $firstletter
T
-c
in POSIX head keine Option gibt : < unix.com/man-page/posix/1/head >.${word:0:1}
oder${word::1}
.echo "$word" | fold -w1 | head -n 1
,printf '%.1s' "$X"
oderprintf '%c' "$X"
diese unterliegen jedoch allen Spielereien mit einem oder mehreren Byte-Zeichen.head -c n
, whoops.echo "fábio" | head -c 2
gibtf�
, also ist das ein weiteres Problem damit, denke ich.quelle
quelle
first
auf den Buchstaben gesetzts
. Sie können es mit sehenecho $s
. Wenn dies bei Ihnen nicht funktioniert und Sie Hilfe beim Debuggen benötigen, kopieren Sie die eingegebenen Befehle und deren Ausgabe und fügen Sie sie ein.Eine tragbare Möglichkeit besteht darin, die Parametererweiterung zu verwenden (eine POSIX-Funktion) :
quelle
Mit Schnitt:
quelle
Da Sie ein
sed
Tag haben, ist hier einesed
Antwort:Spiel für Spiel für diejenigen, die diese genießen (das tue ich!):
{
s
: Starten Sie eine Substitutionsroutine/
: Geben Sie an, was ersetzt werden soll^\(.\)
: Erfassen Sie das erste Zeichen in Gruppe 1.*
:, stellen Sie sicher, dass der Rest der Zeile ersetzt wird/
: Geben Sie den Ersatz an\1
: Gruppe 1 einfügen/
: Der Rest wird verworfen;
q
: Beenden,sed
damit dieser Block nicht für andere Zeilen wiederholt wird, falls vorhanden.}
Na das war ein Spaß!
:)
Sie können auchgrep
und etc verwenden, aber wenn Sie inbash
der${x:0:1}
Magie sind, ist immer noch die bessere Lösung imo. (Ich habe ungefähr eine Stunde damit verbracht, die POSIX-Variablenerweiterung zu verwenden, konnte dies aber nicht:(
)quelle
Mit Bash 4:
quelle