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:
- Hvad er “s
$"\a"
her? Parameterudvidelse, kommandosubstitution eller noget andet? - 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) .
$'...'
er ikke ' t kaldes " fjernelse af tilbud ", menbash
manual giver det ikke ' det. Denne form for citering understøttes også af mindstksh93
shell men ikke afpdksh
. Jeg tror det ' er en udvidelse af POSIX-syntaksen.