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.