GNU/Linux >> Znalost Linux >  >> Linux

Jak při použití printf uniknout speciálním znakům ve skriptu shellu?

Ve prospěch lidí, kteří se sem dostali kliknutím na první výsledek vyhledávání po googlování „bash printf escaped“, správný způsob, jak použít printf ke generování textu uniklého bash, je:

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

Který výstup (bez konce nového řádku):

 here\ is a\ few\\n tests

Zkuste

printf "%s\n" "$string"

Viz printf(1)


Můžete použít $' ' pro uzavření nových řádků a znaků tabulátoru, pak obyčejný echo bude stačit:

#!/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

Udělal jsem také několik dalších menších změn ve vašem skriptu. Kromě toho, že jsem vaši FUNCTION_NAME nastavil malými písmeny, použil jsem také syntaxi funkce, která je více kompatibilní. V tomto případě to není velká výhoda (jako $' ' strings jsou stejně rozšíření bash), ale není důvod používat function func() syntaxi, pokud vím. Také rozsah string může být také lokální pro funkci, ve které se používá, takže jsem to také změnil.

Výstup:

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

Mohu poznamenat, že "man printf" jasně ukazuje, že znak "%" musí uniknout pomocí jiného "%", takže printf "%%" má za následek jediné "%"


Linux
  1. Jak hledat soubory pomocí regulárního výrazu ve skriptu linuxového shellu

  2. Jak spustit skript shellu při spuštění

  3. Jak spočítat počet karet v každém řádku pomocí skriptu shell?

  1. Jak opakovat pomlčku (pomlčku) v shellu

  2. Jak se mohu vyhnout výzvám při používání azcopy na Linuxu ve skriptu?

  3. Jak psát speciální znaky v Linuxu?

  1. Jak vytvořit dočasný soubor ve skriptu Shell?

  2. Jak spouštět příkazy v Gnuplot pomocí skriptu Shell?

  3. Jak zapíšu znaky jiné než ASCII pomocí echa?