Seltsamerweise ist in vielen Muscheln getopts
ein sehr wahrscheinlicher Kandidat für einen Job wie diesen. Dies mag zunächst nicht intuitiv erscheinen, aber wenn Sie bedenken, dass getopts
die Hauptfunktion darin besteht, so viele bestimmte Befehlszeilenoptionen für einzelne Zeichen zu erkennen und zur Interpretation anzubieten, wie sie in einer verketteten Reihe derselben enthalten sind, kann dies zu einer gewissen Beeinträchtigung führen mehr Sinn.
Um zu demonstrieren, aus einer bash
Shell:
x=$(printf '\n\r%010s\t' hello)
OPTIND=1
while getopts : na "-$x"
do printf %q\\n "$OPTARG"
done
$'\n'
$'\r'
\
\
\
\
\
h
e
l
l
o
$'\t'
Auf diese Weise kann es manchmal zweckmäßig sein, getopts
die Demontage in solchen Fällen als eine Art Shell-Autopilot zu handhaben. Wenn Sie dies tun, können Sie einfach unerwünschte Bytes mit a aussortieren case
oder Ihre String-Sicherung aus Byte 1 [
testen ]
und erstellen:
OPTIND=1 y=$(printf \\n\\r) z=
while getopts : na "-$x"
do case $OPTARG in ([!$y])
z=$z$OPTARG
esac
done
printf %q\\n "$z"
$' hello\t'
In Anbetracht dieses einfachen Beispielfalls - und einer Shell, die die bereits an anderer Stelle erwähnten Parametererweiterungen unterstützt - werden diese Erweiterungen Ihnen hier wahrscheinlich besser dienen. Aber ich dachte, es getopts
könnte auch eine Erwähnung wert sein, falls Sie sich dessen in dieser Hinsicht nicht bewusst sind. Als ich davon erfuhr, fand ich jedenfalls viele nützliche Anwendungen dafür.
printf '%q\n' "$string"
Sie eine Escape-Version einer beliebigen Zeichenfolge abrufen. Zum Beispiel:printf '%q\n' 'foo\n'
->foo\\n
;printf '%q\n' $'foo\n'
->$'foo\n'