1. ホーム
  2. string

[解決済み】シェルスクリプト - 変数から最初と最後の引用符 (") を削除します。

2022-03-26 01:37:55

質問

以下は、より大きなスクリプトの中のシェルスクリプトのスニペットである。これは、変数が保持する文字列から引用符を削除するものです。sedを使ってやっているのですが、効率的でしょうか?もしそうでないなら、効率の良い方法は何でしょうか?

#!/bin/sh

opt="\"html\\test\\\""
temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'`
echo $temp

解決方法は?

よりシンプルで効率的な方法があります。ネイティブシェルのプレフィックス/サフィックス削除機能を使用します。

temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"

${opt%\"} はサフィックスを削除します。 " (シェルの解釈を防ぐためにバックスラッシュでエスケープ)。

${temp#\"} は接頭辞 " (シェルの解釈を防ぐためにバックスラッシュでエスケープ)。

もう一つの利点は、周囲の引用符がある場合にのみ、周囲の引用符を削除することである。

ところで、あなたのソリューションは、最初と最後の文字が何であれ、常に削除されます(もちろん、あなたは自分のデータを知っていると思いますが、何を削除しているかは常に確認したほうがよいでしょう)。

sedを使用する。

echo "$opt" | sed -e 's/^"//' -e 's/"$//'

(jfgagne氏の指摘による改良版で、echoを削除したもの)

sed -e 's/^"//' -e 's/"$//' <<<"$opt"

そのため、先頭の " は何もなく、末尾の " にも何もない。同じ呼び出しの中で(パイプでつないで別のsedを起動する必要はない。を使って -e を使えば、複数のテキスト処理を行うことができます)。