Widziałem history | grep blah
i history |grep blah
; a history|grep blah
także działa, chociaż wydaje się, że nikt go nigdy nie używa.
Czy jest jakieś znaczenie w przestrzeniach (np. Potokowanie do / z różnych poleceń wymaga innego użycia spacji), czy zawsze jest arbitralne?
|
potok lub;
średnik są używane przez większość powłok (bash, ksh, tcsh) jako separator poleceń. gdy nie są ujęte w cudzysłów, białe znaki przed i po są nieistotne.Odpowiedzi:
bash
definiuje kilka metaznaków . Odman bash
:Ponieważ metaznaki oddzielają słowa, nie ma znaczenia, czy są one otoczone spacjami. Symbol potoku
|
, jest metaznakiem, a zatem, jak zauważyłeś, nie potrzebuje wokół niego spacji.Należy zauważyć, że
[
,]
,{
,}
, i=
to nie metaznaki. Natomiast ich znaczenie zależy silnie od tego, czy są otoczone pustkami.Przykłady sytuacji, gdy spacje są i nie są potrzebne
Jak zauważyłeś, nie ma znaczenia, czy
|
jest otoczony przestrzenią. Rozważmy kilka przykładów, które często dezorientują użytkowników bash. Rozważać:Pareny powyżej zmuszają
date
polecenie do uruchomienia w podpowłoce. Ponieważ(
i)
są metaznakami, nie są potrzebne żadne spacje. Dla kontrastu:Ponieważ
{
i nie}
są metaznakami, powłoka jest traktowana jako jedno słowo. Zamiast szukać polecenia, szuka polecenia o nazwie . Ponieważ nie można go znaleźć, pojawia się błąd.{date}
date
{date}
Innym częstym problemem jest
test
polecenie. Następujące działa pomyślnie:Usuń spacje i pojawi się błąd:
Ponieważ
[
i nie]
są metaznakami, powłoka traktuje jako pojedyncze słowo, a wynik, podobnie jak w przykładzie, jest błędem.[.bashrc]
date
Instrukcje przypisania są również wrażliwe na spacje. Następujące zadanie powiedzie się:
Dodaj spację, a przypisanie nie powiedzie się:
W powyższym powłoka tymczasowo ustawia się
v
na pustą, a następnie wykonujedate
polecenie.Dodaj spację wcześniej
=
również powoduje awarię, ale z innego powodu:Tutaj powłoka próbuje wykonać polecenie
v
z argumentem=date
. Błąd wynika z tego, że nie znaleziono żadnej nazwy poleceniav
.źródło
=
. Trochę czasu zajęło debugowanie.Rury umożliwiają wykorzystanie danych wyjściowych programu jako danych wejściowych innego ...
Jeśli chodzi o przestrzeń, to tylko kwestia czytelności / preferencji personalnych, takich jak wspomniany @jasonwryan.
Jeden spacja przed i po „|” jest normą ....
Możesz także użyć go z kolumną -t, aby nie tylko zadbać o czystość jednego linijki, ale także o wynik.
źródło
Jest jeden przypadek, w którym użyteczne może być nie używanie spacji. Jeśli nie używasz układu amerykańsko-amerykańskiego, możesz zostać zmuszony do użycia niektórych kombinacji, takich jak AltShiftLwprowadzenie potoku. Chociaż nie jest to problem sam w sobie, jedną konsekwencją jest to, że czasami wprowadzasz znaki niedrukowalne przed lub po tym znaku. Na przykład na francuskiej klawiaturze Macbooka Pro muszę użyć AltShiftLdanych wejściowych
|
. Gdy piszesz szybko, możesz przypadkowo wpisać to: AltShift( L, Space)Jeśli nie wiesz, że AltShiftSpacewprowadza inną spację (spację nierozdzielającą ( U + 00A0 )), następujący błąd może być trudny do zrozumienia:
zsh: command not found: tail
źródło
Jedynym znaczeniem przestrzeni w tym przypadku jest estetyka.
Lub innymi słowy przydatne, aby polecenia były bardziej czytelne dla człowieka.
źródło