9

Perl ワンライナーを使用して SQL ステートメントを作成していますが、一重引用符を含めることができません。

これが私が望むものです: 最初のフィールドを取り、それに引用符を追加します。

echo "a,b" | perl -F',' -lane 'print $F[0];'
 'a'

いくつかの異なる方法を試しましたが、うまくいきませんでした。

  1.  

    echo "a,b" | perl -F',' -lane 'print qq('$F[0]');'
    [0]
    
  2.  

    echo "a,b" | perl -F',' -lane 'print q('$F[0]');'
    [0]
    

ここに別の興味深い問題があります。

print文で一重引用符を出力していますが、変数に値を代入して出力するとうまくいきません。

perl -lwe "print q( i'am );"
 i'am

perl -lwe "$b=q( didn't ); print $b"

Perl のワンライナーで一重引用符と二重引用符を使用するにはどうすればよいですか?

4

4 に答える 4

21

一重引用符だけを使用することはできません。'\''これを使用して正しくエスケープする必要があります。

$ echo "a,b" | perl -F',' -lane 'print "'\''$F[0]'\''";'
'a'
于 2011-02-24T14:52:43.157 に答える
13

シェルが引用符をどのように処理するかを学ぶ必要があります。
私はASCII値を次のように使用します'

echo "a,b" | perl -F',' -lane 'print "$F[0]\047";'
a'

q//演算子はワンライナーでqq//も役立ちます。

于 2011-02-24T14:47:50.280 に答える
3

8進数値の変数を使用します。

echo "a,b" | perl -F',' -lane '$sq="\047"; print "$sq$F[0]$sq";'

また、あなたの試み#1のわずかな修正はうまくいくでしょう:

echo "a,b" | perl -F',' -lane "print qq{'\$F[0]'};"

これは、外側のセットに二重引用符を使用し、ドル記号をエスケープして、シェルがそれを解釈しないようにします。

于 2011-02-24T23:41:37.063 に答える
1

スクリプトを一重引用符ではなく二重引用符で囲むと、エスケープしたり、ANSIシーケンスを使用して一重引用符を表すことなく、スクリプト内で一重引用符を使用できます。これはおそらく最も効果的で読みやすいソリューションです。

于 2011-02-24T16:24:39.300 に答える