There's a simpler and more efficient way, using the native shell prefix/suffix removal feature:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
will remove the suffix "
(escaped with a backslash to prevent shell interpretation).
${temp#\"}
will remove the prefix "
(escaped with a backslash to prevent shell interpretation).
Another advantage is that it will remove surrounding quotes only if there are surrounding quotes.
BTW, your solution always removes the first and last character, whatever they may be (of course, I'm sure you know your data, but it's always better to be sure of what you're removing).
Using sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Improved version, as indicated by jfgagne, getting rid of echo)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
So it replaces a leading "
with nothing, and a trailing "
with nothing too. In the same invocation (there isn't any need to pipe and start another sed. Using -e
you can have multiple text processing).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. This syntax will remove qoutes only when there is a matching pair. – John Smith