Curiosamente, en muchos shells getopts
es un candidato muy probable para un trabajo como este. Esto puede parecer contradictorio al principio, pero si considera que getopts
'la función principal es reconocer y ofrecer para la interpretación tantas opciones de línea de comandos de un solo carácter especificadas como se pueden encontrar en una serie concatenada de las mismas, podría comenzar a hacer un poco mas sentido.
Para demostrar, desde un 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'
De esa manera, a veces puede ser conveniente permitir getopts
manejar el desmontaje como una especie de piloto automático de shell para casos como este. Cuando lo haga, puede eliminar los bytes no deseados w / a case
o [
probar ]
y crear una copia de seguridad de su cadena desde el byte 1:
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'
Dado este simple caso de ejemplo, y dado un shell que admite las expansiones de parámetros ya mencionadas en otra parte, dichas expansiones probablemente le servirán mejor aquí. Pero pensé getopts
que valdría la pena mencionarlo también en caso de que no conocieras sus capacidades a este respecto. Ciertamente, cuando me enteré, encontré muchas aplicaciones útiles para ello, de todos modos.
printf '%q\n' "$string"
obtener una versión escapada de cualquier cadena. Por ejemplo:printf '%q\n' 'foo\n'
->foo\\n
;printf '%q\n' $'foo\n'
->$'foo\n'