Forum Linux.pl

Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: p.nowak w 2020-01-13, 20:22:44

Tytuł: Bash i znaki specjalne
Wiadomość wysłana przez: p.nowak w 2020-01-13, 20:22:44
Witam,
jak to jest z wyświetlaniem znaków specjalnych w terminalu? Znalazłem sobie w sieci ebooka sprzed kilku lat i w jednym z przykładów podano iż komenda echo nie wyświetli znaku wykrzyknika ! i wyrzuci błąd "bash: !: event not found error" gdy w napiszemy polecenie
$ echo "cannot include exclamation - ! within double quotes". Uruchomiłem to polecenie pod centosem 8 i działa bez problemu. Coś się zmieniło w tej kwestii?
Z góry dziękuje za wyjaśnienie.
 
Tytuł: Odp: Bash i znaki specjalne
Wiadomość wysłana przez: parana w 2020-01-13, 22:12:34
Napisz sobie:
echo !10
co Ci wyszło? Rozumiesz co się dzieje? Teraz inne cyfry po !? Co działa?

a napisz
echo \!10
jaki wynik?

I jeszcze jedno do pomyślenia:
 echo "Ala ma kota !!"

oraz
echo "!-"
Tytuł: Odp: Bash i znaki specjalne
Wiadomość wysłana przez: beaker w 2020-01-14, 08:57:40
Autor pytał o coś zupełnie innego.
Wg poradnika nie można użyć wykrzyknika pomiędzy cudzysłowami gdyż zwróci to błąd "bash: !: event not found error".
U autora jednak ten błąd się nie pojawia.
U mnie zresztą też:
$ echo "cannot include exclamation - ! within double quotes"
cannot include exclamation - ! within double quotes

Zapewne chodzi o ten poradnik: https://books.google.pl/books?id=yHc5DwAAQBAJ&pg=PA11&lpg=PA11&dq=echo+%22cannot+include+exclamation+-+!+within+double+quotes&source=bl&ots=BZjIy9p8ZC&sig=ACfU3U2rb-YhnI9bXsehnPgLQX_NbrYZKg&hl=pl&sa=X&ved=2ahUKEwilt5G8x4LnAhWwlYsKHXcJAs0Q6AEwBHoECAkQAQ#v=onepage&q=echo%20%22cannot%20include%20exclamation%20-%20!%20within%20double%20quotes&f=false

Prawdopodobnie jest błąd w tym przykładzie i miał on brzmieć tak:
$ echo "cannot include exclamation !- within double quotes"
Tytuł: Odp: Bash i znaki specjalne
Wiadomość wysłana przez: p.nowak w 2020-01-14, 20:44:41
Dziękuję wszystkim za cenne spostrzeżenia. Nie znałem zastosowania ! w bashu. Teraz już wiem że stanowi znak specjalny w połączeniu z innymi znakami i można go zniwelować backslashem. W przykładzie z ebooka nie rozumiałem dlaczego nie wywala mi błędu. Jeszcze muszę doczytać czym różni wyświetlanie się ciągów wyrażeń z użyciem cudzysłowów i bez :)
Tytuł: Odp: Bash i znaki specjalne
Wiadomość wysłana przez: parana w 2020-01-14, 21:05:19
No i nie zrobiłeś o to co porosiłem a tak byś wiedział że:

! - to desygnator zdarzeń a zostosowanie go w poleceniu w Bash umożliwia rozwinięcie desygnatora zdarzeń z historii.
Wpisz
history
otrzymasz listę z numerami do zdarzeń

Więc w moich przykładach podanych wyżej:
!  rozpoczyna podstawianie historii
!!  poprzednie polecenie
!n  polecenie nr n z historii
!-n n-te polecenie wstecz od bierzącego
!tekst  ostatnie polecenie zaczynające się od tekst

więc faktycznie ! nie ma żadnego zastosowania w bash i tylko możesz wstawiasz go po ty by następnie go  skasować - ot taki znak do zabawy
Tytuł: Odp: Bash i znaki specjalne
Wiadomość wysłana przez: p.nowak w 2020-01-14, 22:08:24
Kiepski ze mnie uczeń . Dotarłem dopiero na początek manuala basha. Tam jest mowa o "history expansion character". Po odpaleniu Twoich komend domyśliłem się ich znaczenia ale nie wpadłem jak działa
echo "!-"
:)