GNU/Linux >> Linux の 問題 >  >> Linux

printfを使用しているときに、シェルスクリプトで特殊文字をエスケープする方法は?

「bash printf escaped」をグーグルで検索した後、最初の検索結果をクリックしてここにたどり着いた人々のために、printf を使用して bash エスケープされたテキストを生成する正しい方法は次のとおりです。

printf " %q" "here is" "a few\n" "tests"

どの出力 (末尾の改行なし):

 here\ is a\ few\\n tests

試す

printf "%s\n" "$string"

printf(1) を参照


$' ' を使用できます 改行とタブ文字を囲むには、プレーンな echo で十分です:

#!/bin/bash 

get_lines() {    
   local string
   string+='The path to K:\Users\ca, this is good'
   string+=$'\n'
   string+='The second line'
   string+=$'\t'
   string+='123'
   string+=$'\n'
   string+='It also has to be 100% nice than %99'

   echo "$string"
}

get_lines

また、スクリプトにいくつかの小さな変更を加えました。 FUNCTION_NAME を小文字にするだけでなく、より広く互換性のある関数構文も使用しました。この場合、大きな利点はありません ($' ' のように) とにかく、文字列は bash 拡張機能です) が、function func() を使用する理由はありません 私が知る限り、構文。また、string のスコープ それが使用されている関数に対してローカルである可能性もあるので、それも変更しました.

出力:

The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99

「man printf」は、「%」文字が別の「%」を使用してエスケープする必要があることを明確に示しているため、printf「%%」は単一の「%」になります


Linux
  1. シェルで引用をエスケープする方法は?

  2. シェルスクリプトでスイッチを処理する方法は?

  3. シェルスクリプトで一時ファイルを作成するにはどうすればよいですか?

  1. シェルスクリプトを使用してgnuplotでコマンドを実行する方法は?

  2. echo を使用して非 ASCII 文字を書き込むにはどうすればよいですか?

  3. 実行中にシェルスクリプトを編集する

  1. シェル文字と変数を使用して作業ディレクトリを識別する方法

  2. 起動時にシェルスクリプトを実行する方法

  3. シェルスクリプトを使用して各行のタブ数を数える方法は?