GNU/Linux >> Znalost Linux >  >> Linux

Proč substituce příkazů Shell pohltí znak na konci nového řádku?

Podle následujícího příkladu a jako v mé nedávné otázce Kam se v bash ztratil znak nového řádku? , chci vědět „proč“ se to děje

  x="$(echo -ne "anbn")" ; echo -n "$x" | xxd -p 
# Output is: 610a62 
# The trailing newline from the 'echo' command
#   has been "deleted" by Command Substitution

Předpokládám, že tam musí být nějaké velmi významný důvod pro akci shellu, jmenovitě substituce příkazů, skutečně odstranit některá data z výstupu příkazu, který nahrazuje…
ale nemůžu se z toho dostat, protože se zdá být opakem toho, co to je předpokládá se dělat.. tzn. předat výstup příkazu zpět do procesu skriptování... Zadržování jedné postavy mi připadá divné, ale předpokládám, že to má rozumný důvod... Rád bych zjistil, jaký je ten důvod...

Přijatá odpověď:

Protože shell původně nebyl zamýšlen jako úplný programovací jazyk.

Je poměrně obtížné odstranit koncové n z nějakého výstupu příkazu.
Nicméně pro účely zobrazení končí téměř všechny příkazy svůj výstup s n , takže… musí existovat jednoduchý způsob, jak jej odstranit, když jej chcete použít v jiném příkazu. Automatické odstranění pomocí $() konstrukce byla zvoleným řešením.

Možná tedy tuto otázku přijmete jako odpověď:

Můžete najít jednoduchý způsob, jak odstranit koncové n pokud to nebylo provedeno automaticky v následujícím příkazu?

> echo The current date is "$(date)", have a good day!

Všimněte si, že citace jsou vyžadovány, aby se zabránilo rozbití dvojitých mezer, které se mohou objevit ve formátovaných datech.


Linux
  1. Proč přihlašovací shell „sudo -i“ poruší argument řetězce příkazu Here-doc?

  2. Proč možnost Ssh -t přidává Cr &Lf do přesměrovaného výstupu?

  3. Proč má Ls -l na výstupu jinou velikost než Ls -s?

  1. Co znamená syntaxe |&v jazyce shellu?

  2. Proč popen() vyvolá shell k provedení procesu?

  3. Proč spouštět příkaz prostředí Linux s '&'?

  1. Jak přiřadit výstup příkazu proměnné shellu?

  2. Proč slabtop -o vrací pouze prvních 23 řádků, když je příkaz rourou?

  3. Skrýt výstup příkazu shellu pouze při úspěchu?