Mekanisme for BELL-karakter ' \ a '?

Jeg læser en bog om shell-programmering og lærer, at følgende kommandoer er ækvivalente, hvilket bip på min Mac men ikke lyder på Ubuntu:

$ echo $"\a" $ echo -e "\a" $ 

terminal i begge tilfælde beder dog en tom linje. Mine spørgsmål er:

  1. Hvad er “s $"\a" her? Parameterudvidelse, kommandosubstitution eller noget andet?
  2. Hvorfor echo udskriver en tom linje, som om parameteren er udefineret, f.eks. i tilfælde af

$ echo $NONSENSE hvilken beder den tomme linje? Tak!

Svar

don “t lav lyd på Ubuntu:

måske fordi din særlige terminalemulator er konfigureret til undgå lyde, eller fordi pcspkr kernemodulet er aflæst osv … Du kan bruge en anden terminalemulator (f.eks. den gamle xterm) hvilket skal bippe.

Hvad er s $"\a" her?

Læs kapitel om shelludvidelse i Bash manualen. Det kaldes ANSI-C citering (som kommenteret af South Parker ).

Hvorfor ekko udskriver en tom linje

kommandoen echo (læs mere echo (1) …) er ofte en bash shell indbygget så (uden nogen -n) den udskriver sine udvidede argumenter (her klokketegnet) efterfulgt af en ny linje. Men din terminalemulator ringer ikke den hørbare klokke (og klokkeslættet vises ikke , da det er et kontrolkarakter )

BTW, Apple rygtes om ikke at kunne lide GPLv3 + -licensen, så du kan opgradere din bash til en nyere version (f.eks. 4.4 i august 2017) på din Apple-computer.

Du kan muligvis læse tty demystified for en historisk tilgang til terminalemulatorer på Unix. Se også pty (7) .

Kommentarer

  • At ' er intenst informativ, stor tak! 🙂
  • $'...' er ikke ' t kaldes " fjernelse af tilbud ", men bash manual giver det ikke ' det. Denne form for citering understøttes også af mindst ksh93 shell men ikke af pdksh. Jeg tror det ' er en udvidelse af POSIX-syntaksen.
  • Kusalananda Jeg tror du har ret, syntaksen hedder ASCI-C med citering: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  • @SouthParker Ah, at ' er navnet på det. Tak for at hjælpe mig med at huske!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *