一重引用符やその他の特殊文字を含む文字列を印刷します。

一重引用符やその他の特殊文字を含む文字列を印刷します。

AIXスクリプトを使用して正しく記述するにはどうすればよいですか?私の要件は、test.txtに次のコマンドを書くことです。

clock=$(prtconf -s | awk '{print $4,$5}')

私は次のコマンドを試しました。

print 'clock=$(prtconf -s | awk '{print $4,$5}')' > test.txt

test.txt で作成された出力は次のようになります。

clock=$(prtconf -s | awk {print ,})

引用符を使用する場合" ":

print "clock=$(prtconf -s | awk '{print $4,$5}')"

これにより、直接次のことができます。

clock=3612 MHz

この問題をどのように解決できますか?

ベストアンサー1

最も簡単な方法は、'…'文字列の周りに一重引用符を使用することです。一重引用符はリテラル文字列を区切るため、一重引用符を除くすべての項目をそれらの間に入れることができます'。文字列に一重引用符を挿入するには、4文字のシーケンス'\''(一重引用符、バックスラッシュ、一重引用符、一重引用符)を使用します。

技術的には、一重引用符で囲まれたリテラルの中に一重引用符を入れることはできません。ただし、連続テキストは単一のテキストと同じくらい良いです。'foo'\''bar'次のように解析されます。

  1. 一重引用符リテラルfoo
  2. バックスラッシュで囲まれたリテラル文字'
  3. 一重引用符リテラルbar

これが実際に意味するのは、これが'\''一重引用符リテラル内で一重引用符をエスケープする方法であることです。

kshprintコマンドはバックスラッシュ拡張を実行します。-rこれを防ぐには、オプションを追加してください。印刷したい文字列にバックスラッシュがないため問題はありませんが、-rメンテナンス中にバックスラッシュが追加された場合に使用することをお勧めします。

print -r -- 'clock=$(prtconf -s | awk '\''{print $4,$5}'\'')' > test.txt

または、POSIXメソッドを使用して文字列を文字通り印刷し、末尾に改行を追加することもできます。

printf '%s\n' 'clock=$(prtconf -s | awk '\''{print $4,$5}'\'')' > test.txt

おすすめ記事