Powiedziano mi, że spacje są ważne w bash
innych skryptach powłoki i nie powinienem zmieniać ich istnienia, chyba że wiem, co robię. Przez „zmianę istnienia” rozumiem albo wstawienie spacji między dwoma znakami spacji lub usunięcie spacji między dwoma znakami spacji, np. Zmiana var="$val"
na var ="$val"
lub odwrotnie. Chcę zapytać
Czy są jakieś przypadki, w których użycie jednej spacji lub wielu kolejnych spacji w skrypcie powłoki robi różnicę? .
(Oczywiście wstawianie / usuwanie spacji w cudzysłowach robi różnicę, np. Zmiana z echo "a b"
na echo "a b"
lub odwrotnie. Szukam przykładów innych niż ten trywialny przykład.)
Zetknąłem się z tym pytaniem, ale dotyczy ono dodawania i usuwania spacji między dwoma znakami spacji, dla których znam wiele przykładów, które mogłyby to zmienić.
Każda pomoc będzie mile widziana. Uwzględnij więcej odmian muszli, jeśli to możliwe.
źródło
echo
polecenie z dużą ilością białych znaków między poleceniem a argumentem.To prawdopodobnie oszustwo, ale to:
różni się od tego:
nawet jeśli spacje nie są w cudzysłowach. ;-)
Co więcej, to:
różni się od tego:
mimo że wyglądają identycznie!
źródło
Jeśli nie będziemy rozmawiać o znak spacji (
U+0020
), ale jakiegokolwiek znaku spacji (U+0020
,\n
,\t
, itd), a następnie jeden szczególny przypadek przychodzą mi na myśl: oto dokumentach.Ten kod (używając spacji):
Wydrukuje:
Ale ten kod (używając kart):
Wydrukuje:
Jest tak, ponieważ ( jak stwierdza POSIX ):
źródło
<<-
operatora. Dziękuję Ci bardzo.Ma to również wpływ podczas pisania instrukcji przypisania. Na przykład, jeśli powiem,
FOO=xyz
że utworzy zmienną środowiskową o nazwieFOO
o wartościxyz
, ale jeśli oddzielę równy spacją, pomyśli, że wywołuję program o nazwieFOO
z arg=xyz
. To ma znaczenie, jeśli chodzi o określoną składnię.źródło
FOO=xyz
tworzy wewnętrzną zmienną powłoki, ale nie zmienną środowiskową. Potrzebujeszset -a
lubexport FOO=xyz
do tego (tj. Czyniąc go częścią środowiska podprocesów innych niż podpowłoka).