Script de Shell: elimina la primera y la última comilla (") de una variable
A continuación se muestra el fragmento de un script de shell de un script más grande. Elimina las comillas de la cadena contenida en una variable. Lo estoy haciendo usando sed, pero ¿es eficiente? Si no, ¿cuál es la forma eficiente?
#!/bin/sh
opt="\"html\\test\\\""
temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'`
echo $temp
Utilice tr para eliminar "
:
echo "$opt" | tr -d '"'
NOTA: Esto no responde completamente a la pregunta, elimina todas las comillas dobles, no solo las iniciales y finales. Vea otras respuestas a continuación.
Existe una forma más sencilla y eficiente de utilizar la función nativa de eliminación de prefijos/sufijos del shell:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
eliminará el sufijo "
(escapado con una barra invertida para evitar la interpretación del shell).
${temp#\"}
eliminará el prefijo "
(escapado con una barra invertida para evitar la interpretación del shell).
Otra ventaja es que eliminará las comillas circundantes sólo si las hay.
Por cierto, su solución siempre elimina el primer y el último carácter, sean los que sean (por supuesto, estoy seguro de que conoce sus datos, pero siempre es mejor estar seguro de lo que está eliminando).
Usando sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Versión mejorada, como indica jfgagne, eliminando el eco)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Por lo tanto, reemplaza un principio "
sin nada y un final "
sin nada también. En la misma invocación (no es necesario canalizar e iniciar otro sed. Al usarlo, -e
puede tener procesamiento de texto múltiple).