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í.)