Script de Shell: elimina la primera y la última comilla (") de una variable

Resuelto user1263746 asked hace 12 años • 19 respuestas

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
user1263746 avatar Mar 16 '12 14:03 user1263746
Aceptado

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.

wieczorek1990 avatar Oct 11 '2014 12:10 wieczorek1990

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, -epuede tener procesamiento de texto múltiple).

huelbois avatar Mar 16 '2012 07:03 huelbois