So prüfen Sie die ersten Zeichen in einem string in UNIX-shell Bash oder?
Ich bin am schreiben eines Skripts in UNIX, wo ich Sie zu prüfen, ob das erste Zeichen im string ist "/" und wenn es so ist, Zweig.
Ich habe z.B. einen string:
/some/directory/file
Möchte ich dies wieder 1, und:
server@10.200.200.20:/some/directory/file
auf 0 zurück.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Viele Möglichkeiten, dies zu tun. Sie könnten die Verwendung von Platzhaltern in doppelte Klammern:
Können Sie substring expansion:
Oder eine regex:
${str::1}
.Betrachten Sie die case-Anweisung als auch die ist kompatibel mit den meisten sh-basierte shells:
*
entspricht nur einer einzigen Pfad-Komponente, nicht über die Schrägstriche/
foo='*'; [ ${foo:0:1} == "/" ] && echo 1 || echo 0
wird die Ausgabe dieses Fehlersbash: [: too many arguments
. Verwenden[ "${foo:0:1}" == "/" ] && echo 1 || echo 0
oder noch besser[[ ${foo:0:1} == "/" ]] && echo 1 || echo 0
cut -c1
Dies ist POSIX, und im Gegensatz zu
case
tatsächlich Extrakte der erste char, wenn Sie es brauchen für später:awk substr
ist ein weiterer POSIX, aber weniger effiziente alternative:printf '%s'
ist, um Probleme zu vermeiden, die mit escape-Zeichen: https://stackoverflow.com/a/40423558/895245 z.B.:Ausgänge
\
als erwartet.${::}
scheint nicht zu POSIX.Siehe auch: Wie extrahieren Sie die ersten beiden Zeichen einer Zeichenkette in shell-scripting?