GNU/Linux >> Znalost Linux >  >> Linux

echo znak nového řádku nefunguje v bash

Smíšená historie echo znamená, že jeho výchozí operace se liší shell od shellu. POSIX určuje, že výsledek echo je „implementation-defined“, pokud je první argument -n nebo jakýkoli argument obsahuje zpětné lomítko.

Spolehlivější je použít printf (buď jako vestavěný příkaz nebo externí příkaz), kde je chování lépe definováno:zpětné lomítko ve stylu C a specifikátory formátu jsou podporovány ve formátovacím řetězci (první argument).

printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar

Můžete ovládat rozšíření sekvencí escape zpětného lomítka bash echo vestavěný příkaz s xpg_echo možnost shellu.

Nastavte jej v horní části libovolného bashu skript pro vytvoření echo automaticky rozšiřovat zpětné lomítko bez nutnosti přidávat -e ke každému příkazu echo.

shopt -s xpg_echo
echo 'foo\nbar'

Doporučená praxe je použít printf pro všechny nové skripty.

printf '%s\n%s\n' "Hello" "World"

printf '%s\n' "Hello\nWorld"

Když použijete bash myfile.sh , Bash se spouští v "dávkovém" režimu, samostatně proces a nedělá přečíst jeho profil nebo rcfile.

Když použijete . myfile.sh , soubor je zdrojový aktuálním procesem shellu (jakoby jeho obsah zadali vy), proto vidí vaše aktuálně definované aliasy.

Obecně je velmi špatný nápad psát skripty, které závisí na konkrétní konfiguraci shellu, zejména aliasy, pokud je nedefinujete ve skriptu sám. (Nikdy spoléhat na uživatelské .bashrc , i když je to vaše vlastní.)


Linux
  1. Proměnná Curl Outfile nefunguje ve skriptu Bash?

  2. R 3.5.0 nefunguje na Ubuntu 18.04?

  3. Použití případových prohlášení v Bash

  1. printf:příkaz nenalezen

  2. echo:příkaz nenalezen

  3. Pole v Bash nenalezeno

  1. Bash/sh příkaz „jestli je to jinak“.

  2. bash sh - příkaz nenalezen

  3. Linuxový příkaz 'll' nefunguje