Proszę wyjaśnić, dlaczego 1 4 5 6 jest wyświetlany dla ostatnich czterech instrukcji echa? Uderzyłem to raz przypadkiem, ale teraz jestem ciekawy, dlaczego tak się dzieje.
Te instrukcje działają zgodnie z oczekiwaniami (dla mnie).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Te instrukcje echa konsekwentnie wyświetlają 1 4 5 6. Czy jest coś specjalnego w tych liczbach?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Dzięki!
- Możliwy duplikat jest powiązany i pomocny, ale nie duplikat. Możliwy duplikat jest z perspektywy
rm
polecenia. To pytanie jest z perspektywy postrzeganego „dziwnego zachowania”echo
polecenia. Podstawową odpowiedzią na oba są globbing. Ktoś szukający problemów zecho
poleceniem nie znalazłby łatworm
pytania, ale raczej trafiłby tutaj.
1
4
5
i6
nullglob
, twój drugi przykład (echo [237890]
) nie wydrukuje niczego, co mogłoby być wskazówką, że widziałeś ekspansję globalną w innych przykładach.Odpowiedzi:
Otwarty nawias
[
to specjalny znak dla powłoki; otwiera algorytm dopasowania wzorca, który mówi „dopasuj dowolny ze znaków w nawiasach”. Ponieważ masz 4 pliki o nazwach: 1, 4, 5 i 6 w bieżącym katalogu, gdy znaki w nawiasach zawierają dowolne z tych cyfr, twoja powłoka zastępuje dopasowanie wzorca tymi nazwami plików. Kiedy zamiast używaćecho [ 9876543210 ]
dzwonisz echo z 3 parametrów:[
,9876543210
, i]
.Powinieneś zacytować parametry instrukcji echo, aby powłoka nie widziała jej jako żądania dopasowania wzorca.
(lub usuń pliki o nazwach 1, 4, 5 i 6 - ale jest to obejście mające na celu wykazanie zachowania, a nie poprawka).
źródło
echo [ 987 ]
połączeniaecho
z trzema parametrami niż nawet wspomniećtest
?echo
interpretuje się różnie,bash
zależnie od tego, czy między nawiasami kwadratowymi są odstępy, a tym, co się w nich znajduje.[123]
vs[ 123 ]
.