Revisione traduzione bash [parte 1]

Giuseppe Sacco giuseppe@sguazz.it
Dom 11 Maggio 2025 15:35:09 CEST


Luca,
il testo è lungo e non ho ancora finito, ma ti passo questa prima parte
di commenti. L'ultima traduzione che ho commentato è l'ultima che ho
controllato. Cercherò di vedere le altre stringhe nei prossimi giorni.

Vedrai che a volte ci sono dei commenti che avrebbero un grosso
impatto, come ad esempio quello sulle virgolette o sulla traduzione di
ARRAY. Ovviamente le mie sono solo proposte.

Vale poi quanto già scritto in questo thread riguardo all'uso del
doppio spazio: io userei lo spazio singolo.

Ciao,
Giuseppe

Il giorno gio, 08/05/2025 alle 09.08 +0200, Luca Vercelli ha scritto:
[...]
> #: arrayfunc.c:63
> msgid "bad array subscript"
> msgstr "indice dell'array errato"

In generale io credo che avrei tradotto dappertutto «array» con
«vettore». Lo so che il termine è sicuramente accettato da tutti anche
in Italia, ma è una di quelle parole per le quali anche la traduzione
italiana è sufficientemente diffusa.

[...]
> #: bashline.c:4628
> msgid "bash_execute_unix_command: cannot find keymap for command"
> msgstr ""
> "bash_execute_unix_command: impossibile trovare una mappatura per il comando"

qui si perde un po' il riferimento alla tastiera. «mappatura» è forse
troppo generico. Potrebbe andare bene qualcosa come
«combinazione/sequenza di tasti», oppure cercare di usare
«scorciatoia»?

[...]
> #: bashline.c:4799
> #, c-format
> msgid "%s: first non-whitespace character is not `\"'"
> msgstr "%s: il primo carattere non spazio non è \"\"\""

nell'originale si ha qualcosa del tipo `"', mentre in italiano
diventa """, che non è chiarissimo. Forse potresti provare a tradurre tutte
le occorrenze del virgolettato `' con «», quindi in questo caso sarebbe «"».
Invece lascerei invariata la traduzione quando l'originale usa già le doppie
virgolette, come per \"%s\" che è usato in altri punti e che manterrei uguale.

> #: bashline.c:4828
> #, c-format
> msgid "no closing `%c' in %s"
> msgstr "carattere di chiusura \"%c\" non presente in %s"

Nel caso che prima avessi scelto di usare «», allora anche in tutti gli
altri punti, come questo qui, dovresti tradurre `' in «».

[...]

> #: builtins/common.c:190
> #, c-format
> msgid "%s: not found"
> msgstr "%s: non trovata"

al femminile? Si riferisce sempre alle opzioni?

[...]
> #: builtins/common.c:236
> #, c-format
> msgid "`%s': not a pid or valid job spec"
> msgstr "\"%s\": non è un pid o un numero di job valido"

Qui non userei "numero" per la parte del job perché si tratta di un
jobspec. Normalmente è con un numero, tipo %4, ma può anche essere %+,
oppure %?while, eccetera. In altri posti hai usato «specifica dei job»

[...]
> #: builtins/common.c:271
> #, c-format
> msgid "%s: no job control"
> msgstr "%s: nessun controllo dei job"
>
> #: builtins/common.c:273
> msgid "no job control"
> msgstr "nessun controllo dei job"

In queste due non capisco bene il contesto. Il controllo in questione è
una cosa che si attiva nella bash se il sistema operativo lo consente,
e vale per tutti i job, non è una cosa dei singoli job, ma «nessuno» fa
pensare a qualcosa che potrebbe essere attivo o meno per ciascun job.
Inoltre in inglese è al singolare. Mi spiace, ma non saprei bene come
tradurlo.

[...]
> #: builtins/common.c:1028 builtins/set.def:964 variables.c:3868
> #, c-format
> msgid "%s: cannot unset: readonly %s"
> msgstr "%s: impossibile azzerare: %s in sola lettura"
>
> #: builtins/common.c:1033 builtins/set.def:930
> variables.c:3873
> #, c-format
> msgid "%s: cannot unset"
> msgstr "%s: impossibile azzerare"

In queste due non userei «azzerare» che, almeno a me, fa capire che il
valore della variabile viene «svuotato» lasciando la variabile senza
valore. Invece «unset» dovrebbe eliminare del tutto la variabile
dall'ambiente di lavoro. In questo senso credo che userei «annullare» o
«cancellare» o «rimuovere».

[...]
> #: builtins/complete.def:501 builtins/complete.def:644
> #: builtins/complete.def:899
> #, c-format
> msgid "%s: no completion specification"
> msgstr "%s: nessun completamento specificato"

Credo che dovrebbe essere «nessuna specifica di completamento»

[...]
>
> #: builtins/declare.def:567 variables.c:3346
> #, c-format
> msgid "%s: nameref variable self references not allowed"
> msgstr "%s: riferimento a nome autoreferenziale non permesso"

qui la frase inglese è comprensibile, ma non capisco quella italiana 🙂
Non ho capito come hai deciso di tradurre nameref, ma la frase completa
potrebbe essere qualcosa del tipo «non si può usare un nameref che
punti a se stesso».

[...]
> #: builtins/declare.def:572 variables.c:2035 variables.c:3343
> #, c-format
> msgid "%s: circular name reference"
> msgstr "%s: riferimento a nome circolare"

qui la frase è ambigua, ma immagino che ad essere circolare sia il
riferimento più che il nome. «riferimento circolare a nome» potrebbe
risolvere l'ambiguità.

[...]
> #: builtins/evalfile.c:143
> #, c-format
> msgid "%s: not a regular file"
> msgstr "%s: non è un file regolare"

«regolare» è molto americano; magari potresti scrivere «normale»,
oppure non capito bene il contesto.

[...]
>
> #: builtins/exit.def:116
> #, c-format
> msgid ""
> "There are stopped jobs.\n"
> msgstr ""
> "Sono presenti job interrotti.\n"
>
> #: builtins/exit.def:118
> #, c-format
> msgid ""
> "There are running jobs.\n"
> msgstr ""
> "Ci sono job in esecuzione.\n"

«there are» è tradotto diversamente nelle due frasi, ma credo che
andrebbero invece omologate.

[...]
> #: builtins/getopt.c:110
> #, c-format
> msgid ""
> "%s: illegal option -- %c\n"
> msgstr ""
> "%s: opzione illecita -- %c\n"

Non ho mai visto tradurre illegal con illecito nel contesto
informatico, sicché a me suona un po' strano. Avrei messo un classico
«non consentita», ma i gusti sono gusti :-)

[...]
> #: builtins/hash.def:144
> #, c-format
> msgid ""
> "%s: hash table empty\n"
> msgstr ""
> "%s tabella di hash vuota\n"

qui manca il «:». Non so se sia importante.

[...]
> #: expr.c:586
> msgid "bug: bad expassign token"
> msgstr "bug: token di expassign errato"

Ci ho messo un po' e non sono ancora sicuro del risultato, ma credo che
«expassign» sia un assegnamento che ha una espressione a destra del
simbolo «=». Se così fosse, io cercherei di rendere più comprensibile
questo messaggio, almeno in italiano, ma non mi è chiaro il contesto.

[...]
> #: expr.c:1450 expr.c:1471
> msgid "--: assignment requires lvalue"
> msgstr "--: l'assegnazione richiede un valore a sinistra"
>
> #: expr.c:1452 expr.c:1473
> msgid "++: assignment requires lvalue"
> msgstr "++: l'assegnazione richiede un valore a sinistra"

non credo che si possa tradurre «lvalue» con «valore a sinistra», difatti
per definizione un lvalue non è un valore, ma un qualcosa che ha un posto
in memoria (puoi pensarlo come una «L»ocazione), in genere è una variabile.
Giustamente sta a sinistra dell'uguale, in un assegnamento, e quindi diventa
lvalue, ma qui parliamo di pre- e post-incremento, ad esempio di espressioni
come VAR++ o ++VAR. Non è quindi corretto dire valore a sinistra. Se non
capisco male questo messaggio appare quando si scrive una espressione
del tipo 5++ che ha in effetti un valore a sinistra, ma non è un
lvalue, cioè non identifica un posto in memoria nel quale mettere il
risultato.

Non so se lvalue abbia una traduzione italiana, ma in caso contrario
lascerei la parola invariata.

[...]
> #: jobs.c:1974 jobs.c:2000
> msgid "Done"
> msgstr "Completato"
[...]
> #: jobs.c:2004
> #, c-format
> msgid "Done(%d)"
> msgstr "Eseguito(%d)"

questi due sono effettivamente diversi?

[...]
> #: lib/malloc/malloc.c:364
> #, c-format
> msgid ""
> "malloc: failed assertion: %s\n"
> msgstr ""
> "malloc: asserzione non riuscita: %s\n"

L'ho sempre tradotto con «fallita». «Non riuscita» è una traduzione
diffusa per questo contesto?

[...]
> #: lib/malloc/malloc.c:876
> msgid "malloc: block on free list clobbered"
> msgstr "malloc: blocco eliminato nell'elenco dei
> disponibili"

credo che «clobbered» voglia dire «rovinato». Nel caso di malloc capita
ad esempio quando si tenti fare una free() con un puntatore che non è
stato restituito da malloc(). Ad esempio se faccio p=malloc(n) e poi
free(&p[4]).

[...]
> #: lib/sh/netopen.c:332
> msgid "network operations not supported"
> msgstr "operazione di rete non supportata"

qui la frase è al plurale in inglese e al singolare in italiano.

[...]
> # (ndt) pretty print?
> #: shell.c:827
> msgid "pretty-printing mode ignored in interactive shells"
> msgstr "modalità di stampa elegante ignorata nelle shell interattive"

Si tratta di una modalità di bash che prende in input un file shell e lo
stampa indentato per bene e senza commenti. Va chiamata così:
$ bash --pretty-print nomefile.sh

non saprei dire se tradurre «pretty» con «elegante» sia la scelta migliore,
ma non ho suggerimenti buoni.

[...]
> #: shell.c:1891
> msgid "I have no name!"
> msgstr "Manca il nome"

credo che ne manchi un pezzetto: «Manca il mio nome»

[...]
> #: shell.c:2088
> #, c-format
> msgid ""
> "Type `%s -c \"help set\"' for more information about shell options.\n"
> msgstr ""
> "Digitare «%s -c \"help set\"» per ulteriori informazioni sulle opzioni di "
> "shell.\n"

Ecco, questo è un esempio dell'utilizzo delle varie virgolette.

[...]
> #: siglist.c:183
> msgid "HFT input data pending"
> msgstr "Dati di input HTF in sospeso"

HFT è diventato HTF. Non so cosa voglia dire ma nelle stringhe successive non
l'hai cambiato come hai fatto qui.

[...]
> #: siglist.c:195
> msgid "migrate process to another CPU"
> msgstr "processo spostato su un'altra CPU"

Qui la frase in inglese non è al passato. Qual è il contesto? Potrebbe
essere «migra processo su altra CPU»?

[...]
> #: subst.c:7929 subst.c:8097
> msgid "%s: invalid variable name"
> msgstr "\"%s\": nome di variabile non valido"

Qui ci sono delle virgolette aggiuntive in italiano. È una svista?

[...]
> #: subst.c:11552
> #, c-format
> msgid "bad substitution: no closing \"`\" in %s"
> msgstr "sostituzione errata: manca «\"» di chiusura in %s"

Mi pare di capire che il carattere mancante sia «`» e non «"». Potresti controllare?

[...]
> #: trap.c:459
> #, c-format
> msgid ""
> "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
> msgstr ""
> "run_pending_traps: il gestore dei segnali è SIG_DFL, viene inviato "
> "nuovamente %d (%s)"

forse manca un «a me stesso» finale.

[...]
> #: builtins.c:184
> msgid "! PIPELINE"
> msgstr ""

Questa non è tradotta.

[...]
> #: builtins.c:447
> msgid ""
> "Null command.\n"
> "    \n"
> "    No effect; the command does nothing.\n"
> "    \n"
> "    Exit Status:\n"
> "    Always succeeds."
> msgstr ""
> "Comando nullo.\n"
> "    \n"
> "    Nessun effetto; il comando non esegue nulla.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    ha sempre successo."

Io qui non direi «non esegue» perché eseguire mi fa venire in mente una
azione esterna, come eseguire un programma esterno; lo tradurrei invece con
«non fa nulla».

[...]
> #: builtins.c:495
> msgid ""
> "Set variable values and attributes.\n"
> "    \n"
> "    Declare variables and give them attributes.  If no NAMEs are given,\n"
> "    display the attributes and values of all variables.\n"
> "    \n"
> "    Options:\n"
> "      -f\trestrict action or display to function names and definitions\n"
> "      -F\trestrict display to function names only (plus line number and\n"
> "    \t\tsource file when debugging)\n"
> "      -g\tcreate global variables when used in a shell function; otherwise\n"
> "    \t\tignored\n"
> "      -I\tif creating a local variable, inherit the attributes and value\n"
> "    \t\tof a variable with the same name at a previous scope\n"
> "      -p\tdisplay the attributes and value of each NAME\n"
> "    \n"
> "    Options which set attributes:\n"
> "      -a\tto make NAMEs indexed arrays (if supported)\n"
> "      -A\tto make NAMEs associative arrays (if supported)\n"
> "      -i\tto make NAMEs have the `integer' attribute\n"
> "      -l\tto convert the value of each NAME to lower case on assignment\n"
> "      -n\tmake NAME a reference to the variable named by its value\n"
> "      -r\tto make NAMEs readonly\n"
> "      -t\tto make NAMEs have the `trace' attribute\n"
> "      -u\tto convert the value of each NAME to upper case on assignment\n"
> "      -x\tto make NAMEs export\n"
> "    \n"
> "    Using `+' instead of `-' turns off the given attribute, except for a,\n"
> "    A, and r.\n"
> "    \n"
> "    Variables with the integer attribute have arithmetic evaluation (see\n"
> "    the `let' command) performed when the variable is assigned a value.\n"
> "    \n"
> "    When used in a function, `declare' makes NAMEs local, as with the "
> "`local'\n"
> "    command.  The `-g' option suppresses this behavior.\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success unless an invalid option is supplied or a variable\n"
> "    assignment error occurs."
> msgstr ""
> "Imposta i valori e gli attributi delle variabili.\n"
> "    \n"
> "    Dichiara le variabili e fornisce loro attributi. Se non vengono forniti "
> "NOMI,\n"
> "    visualizza gli attributi e i valori di tutte le variabili.\n"
> "    \n"
> "    Opzioni:\n"
> "      -f\tlimita l'azione o la visualizzazione ai nomi e alle definizioni di "
> "funzione\n"
> "      -F\tlimita la visualizzazione ai soli nomi di funzione (più numero di "
> "riga e\n"
> "    \t\tfile sorgente durante il debug)\n"
> "      -g\tCrea variabili globali quando usato in una funzione di shell; "
> "altrimenti\n"
> "    \t\tè ignorato\n"
> "      -I\tcreando una variabile locale, eredita attributi e valore\n"
> "    \t\tdi una variable con stesso nome in uno scope precedente\n"
> "      -p\tvisualizza gli attributi e i valori di ciascun NOME\n"
> "    \n"
> "    Opzioni che impostano gli attributi:\n"
> "      -a\tRende i NOMI array indicizzati (se supportata)\n"
> "      -A\tRende i NOMI array associativi (se supportata)\n"
> "      -i\tFornisce ai NOMI l'attributo \"integer\"\n"
> "      -l\tConverte i valori dei NOMI in lettere minuscole in fase di assegnazione\n"
> "      -n\tmake NAME a reference to the variable named by its value\n"
> "      -r\tImposta i NOMI in sola lettura\n"
> "      -t\tFornisce ai NOMI l'attributo \"trace\"\n"
> "      -u\tConverte i valori dei NOMI in lettere maiuscole in fase di assegnazione\n"
> "      -x\tImposta i NOMI come esportabili\n"
> "    \n"
> "    Usando \"+\" al posto di \"-\" disattiva l'attributo fornito, ad\n"
> "    eccezione di a, A e r.\n"
> "    \n"
> "    Le variabili con attributo intero vengono valutate aritmeticamente "
> "(vedere\n"
> "    il comando \"let\") quando alla variabile è assegnato un valore.\n"
> "    \n"
> "    Quando viene usato in una funzione, \"declare\" rende locali i NOMI, "
> "come con\n"
> "    il comando \"local\".\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo a meno che non sia fornita una opzione non valida o "
> "si riscontri un errore nell'assegnazione di variabili."

Qui c'è una parte non tradotta «make NAME a reference to the variable named by its value»
e poi è rimasto un «variable» nella parte italiana.

[...]
> #: builtins.c:566
> msgid ""
> "Write arguments to the standard output.\n"
> "    \n"
> "    Display the ARGs, separated by a single space character and followed by "
> "a\n"
> "    newline, on the standard output.\n"
> "    \n"
> "    Options:\n"
> "      -n\tdo not append a newline\n"
> "      -e\tenable interpretation of the following backslash escapes\n"
> "      -E\texplicitly suppress interpretation of backslash escapes\n"
> "    \n"
> "    `echo' interprets the following backslash-escaped characters:\n"
> "      \\a\talert (bell)\n"
> "      \\b\tbackspace\n"
> "      \\c\tsuppress further output\n"
> "      \\e\tescape character\n"
> "      \\E\tescape character\n"
> "      \\f\tform feed\n"
> "      \\n\tnew line\n"
> "      \\r\tcarriage return\n"
> "      \\t\thorizontal tab\n"
> "      \\v\tvertical tab\n"
> "      \\\\\tbackslash\n"
> "      \\0nnn\tthe character whose ASCII code is NNN (octal). NNN can be\n"
> "    \t\t0 to 3 octal digits\n"
> "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n"
> "    \t\tcan be one or two hex digits\n"
> "      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
> "HHHH.\n"
> "    \t\tHHHH can be one to four hex digits.\n"
> "      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
> "value\n"
> "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success unless a write error occurs."
> msgstr ""
> "Scrive argomenti sullo standard output.\n"
> "    \n"
> "    Visualizza gli ARG sullo standard output, separati da un singolo carattere\n"
> "    spazio, e seguiti da un ritorno a capo.\n"
> "    \n"
> "    Opzioni:\n"
> "      -n\tNon accoda un carattere di ritorno a capo\n"
> "      -e\tAbilita l'interpretazione dei seguenti caratteri backslash di "
> "escape\n"
> "      -E\tDisabilita esplicitamente l'interpretazione dei caratteri "
> "backslash di escape\n"
> "    \n"
> "    \"echo\" interpreta i seguenti caratteri backslash di escape:\n"
> "      \\a\tavviso (campanello)\n"
> "      \\b\tbackspace\n"
> "      \\c\telimina ulteriore output\n"
> "      \\e\tcarattere di escape\n"
> "      \\E\tcarattere di escape\n"
> "      \\f\tavanzamento pagina\n"
> "      \\n\tritorno a capo\n"
> "      \\r\tritorno carrello\n"
> "      \\t\ttabulazione orizzontale\n"
> "      \\v\ttabulazione verticale\n"
> "      \\\\\tbackslash\n"
> "      \\0nnn\til carattere il cui codice ASCII è NNN (ottale). NNN può "
> "avere\n"
> "    \t\tda 0 a 3 cifre ottali\n"
> "      \\xHH\til carattere otto bit il cui valore è HH (esadecimale).  HH "
> "può\n"
> "    \t\tavere una o due cifre esadecimali\n"
> "    \t\tHHHH può avere da una a quattro cifre esadecimali.\n"
> "      \\UHHHHHHHH il carattere Unicode il cui valore è HHHH (esadecimale).\n"
> "    \t\tHHHHHHHH. HHHHHHHH può avere da una a otto cifre esadecimali.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo a meno che non venga riscontrato un errore di "
> "scrittura."

Nella parte italiana manca questa specifica:
 "      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
 "HHHH.\n"

[...]
> #: builtins.c:666
> msgid ""
> "Parse option arguments.\n"
> "    \n"
> "    Getopts is used by shell procedures to parse positional parameters\n"
> "    as options.\n"
> "    \n"
> "    OPTSTRING contains the option letters to be recognized; if a letter\n"
> "    is followed by a colon, the option is expected to have an argument,\n"
> "    which should be separated from it by white space.\n"
> "    \n"
> "    Each time it is invoked, getopts will place the next option in the\n"
> "    shell variable $name, initializing name if it does not exist, and\n"
> "    the index of the next argument to be processed into the shell\n"
> "    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
> "    a shell script is invoked.  When an option requires an argument,\n"
> "    getopts places that argument into the shell variable OPTARG.\n"
> "    \n"
> "    getopts reports errors in one of two ways.  If the first character\n"
> "    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
> "    this mode, no error messages are printed.  If an invalid option is\n"
> "    seen, getopts places the option character found into OPTARG.  If a\n"
> "    required argument is not found, getopts places a ':' into NAME and\n"
> "    sets OPTARG to the option character found.  If getopts is not in\n"
> "    silent mode, and an invalid option is seen, getopts places '?' into\n"
> "    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
> "    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
> "    printed.\n"
> "    \n"
> "    If the shell variable OPTERR has the value 0, getopts disables the\n"
> "    printing of error messages, even if the first character of\n"
> "    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
> "    \n"
> "    Getopts normally parses the positional parameters, but if arguments\n"
> "    are supplied as ARG values, they are parsed instead.\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success if an option is found; fails if the end of options is\n"
> "    encountered or an error occurs."
> msgstr ""
> "Analizza gli argomenti di opzione.\n"
> "    \n"
> "    Getopts è usato dalle procedure di shell per analizzare i parametri\n"
> "    posizionali come opzioni.\n"
> "    \n"
> "    STRINGAOPZ contiene le lettere di opzione da riconoscere; se una "
> "lettera\n"
> "    è seguita da un due punti, ci si aspetta che l'opzione abbia un "
> "argomento,\n"
> "    che dovrebbe essere separato da uno spazio.\n"
> "    \n"
> "    Ogni volta che viene evocato getopts posiziona l'opzione successiva\n"
> "    nella variabile di shell $nome inizializzando il nome, se non esiste,\n"
> "    e l'indice dell'argomento successivo da elaborare nella variabile di\n"
> "    shell OPTIND.  OPTIND è inizializzata a 1 ogni volta che viene invocata\n"
> "    la shell o uno script di shell.  Quando una opzione richiede un "
> "argomento,\n"
> "    getopts posiziona tale argomento nella variabile di shell OPTARG.\n"
> "    \n"
> "    getopts riporta gli errori in uno o due modi.  Se il primo carattere "
> "della\n"
> "    STRINGAOPZ è un due punti, riporta gli errori in silenzio.  In questa\n"
> "    modalità non vengono stampati messaggi di errore.  Se viene riscontrata "
> "una\n"
> "    opzione non valida, getopts posiziona il carattere di opzione trovato "
> "in\n"
> "    ARGOPZ.  Se un argomento richiesto non viene trovato, getopts posiziona\n"
> "    un \":\" nel NOME e imposta ARGOPZ al carattere di opzione trovato.  Se "
> "getopts\n"
> "    non è in modalità silenziosa e viene riscontrata una opzione non valida, "
> "getopts\n"
> "    posiziona \"?\" nel NOME e azzera ARGOPZ.  Se un argomento richiesto non "
> "viene\n"
> "    trovato, viene posizionato un \"?\" nel NOME, ARGOPZ viene azzerato e "
> "viene stampato\n"
> "    un messaggio diagnostico.\n"
> "    \n"
> "    Se il valore della variabile di shell ERROPZ è pari a 0, getopts "
> "disabilita\n"
> "    la stampa dei messaggi di errore anche se il primo carattere della "
> "STRINGAOPZ\n"
> "    non è un due punti.  Il valore predefinito di ERROPZ è pari a 1.\n"
> "    \n"
> "    Getopts normalmente analizza i parametri posizionali, ma se vengono\n"
> "    forniti degli argomenti come valori ARG, vengono analizzati questi ultimi.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo se viene trovata una opzione, insuccesso se viene "
> "raggiunta\n"
> "    la fine delle opzioni o viene riscontrato un errore."

Nella riga:
"    Ogni volta che viene evocato getopts posiziona l'opzione successiva\n"
non userei evocare, ma invocare.

Nella riga:
"    nella variabile di shell $nome inizializzando il nome, se non esiste,\n"
io toglierei «il» perché non si riferisce al nome ma alla variabile chiamata nome.
Farei lo stesso anche per «nel NOME» che è presente più volte e che cambierei in «in NOME» 

Infine, c'è la traduzione dei nomi di variabile OPTARG, OPTIND e OPTERR che credo siano
fissi, quindi non andrebbero tradotti.

[...]
> #: builtins.c:748
> msgid ""
> "Display or execute commands from the history list.\n"
> "    \n"
> "    fc is used to list or edit and re-execute commands from the history list."
> "\n"
> "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
> "    string, which means the most recent command beginning with that\n"
> "    string.\n"
> "    \n"
> "    Options:\n"
> "      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,"
> "\n"
> "    \t\tthen vi\n"
> "      -l \tlist lines instead of editing\n"
> "      -n\tomit line numbers when listing\n"
> "      -r\treverse the order of the lines (newest listed first)\n"
> "    \n"
> "    With the `fc -s [pat=rep ...] [command]' format, COMMAND is\n"
> "    re-executed after the substitution OLD=NEW is performed.\n"
> "    \n"
> "    A useful alias to use with this is r='fc -s', so that typing `r cc'\n"
> "    runs the last command beginning with `cc' and typing `r' re-executes\n"
> "    the last command.\n"
> "    \n"
> "    The history builtin also operates on the history list.\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success or status of executed command; non-zero if an error "
> "occurs."
> msgstr ""
> "Visualizza o esegue comandi dall'elenco della cronologia.\n"
> "    \n"
> "    fc è usato per elencare, modificare e rieseguire comandi dall'elenco "
> "della cronologia.\n"
> "    PRIMO e ULTIMO possono essere numeri che specificano l'intervallo oppure "
> "PRIMO può\n"
> "    essere una stringa, nel qual caso significa il comando più recente che "
> "inizia con\n"
> "    quella stringa.\n"
> "    \n"
> "    Opzioni:\n"
> "      -e EDITOR\tSeleziona l'editor da usare.  Il predefinito è FCEDIT, "
> "quindi EDITOR,\n"
> "    \t\tinfine vi\n"
> "      -l \tElenca le righe invece di modificarle\n"
> "      -n\tOmette i numeri di riga nell'elencare i comandi\n"
> "      -r\tInverte l'ordine delle righe (elenca prima le più recenti)\n"
> "    \n"
> "    Con il formato \"fc -s [pat=rep ...] [comando]\", il COMANDO è\n"
> "    rieseguito dopo aver effettuato la sostituzione VECCHIO=NUOVO.\n"
> "    \n"
> "    Un alias utile da usare insieme è r=\"fc -s\", in modo che digitando \"r "
> "cc\"\n"
> "    viene eseguito l'ultimo comando che inizia con \"cc\" e digitando \"r\" "
> "riesegue\n"
> "    l'ultimo comando.\n"
> "    \n"
> "    Il comando interno history opera anche sull'elenco della cronologia.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo o lo stato del comando eseguito, non zero se si "
> "riscontra un errore."

Alla riga
"      -e EDITOR\tSeleziona l'editor da usare.  Il predefinito è FCEDIT, "
credo che EDITOR debba invece essere «ENAME» oppure «NOMEEDITOR». Se però non
metti ENAME dovresti cambiare anche la corrispondente traduzione che riporto sotto:

#: builtins.c:105
msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
msgstr "fc [-e ename] [-lnr] [primo] [ultimo] oppure fc -s [pat=rep][comando]"

[...]
> #: builtins.c:795
> msgid ""
> "Move jobs to the background.\n"
> "    \n"
> "    Place the jobs identified by each JOB_SPEC in the background, as if "
> "they\n"
> "    had been started with `&'.  If JOB_SPEC is not present, the shell's "
> "notion\n"
> "    of the current job is used.\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success unless job control is not enabled or an error occurs."
> msgstr ""
> "Sposta i job in background.\n"
> "    \n"
> "    Mette il  jobs identificato da ogni SPEC_JOB in background, come se\n"
> "    fossero stati avviati con \"&\". Se SPEC_JOB non è presente, viene\n"
> "    usata la nozione di job corrente della shell.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo a meno che il controllo dei job non sia abilitato o "
> "si riscontri un errore."

Altrove background è stato tradotto con «sullo sfondo», qui invece no.
Inoltre «Mette il jobs identificato» dovrebbe essere tutto al
plurale: «Mette i job identificati»

[...]
> #: builtins.c:858
> msgid ""
> "Display or manipulate the history list.\n"
> "    \n"
> "    Display the history list with line numbers, prefixing each modified\n"
> "    entry with a `*'.  An argument of N lists only the last N entries.\n"
> "    \n"
> "    Options:\n"
> "      -c\tclear the history list by deleting all of the entries\n"
> "      -d offset\tdelete the history entry at position OFFSET. Negative\n"
> "    \t\toffsets count back from the end of the history list\n"
> "    \n"
> "      -a\tappend history lines from this session to the history file\n"
> "      -n\tread all history lines not already read from the history file\n"
> "    \t\tand append them to the history list\n"
> "      -r\tread the history file and append the contents to the history\n"
> "    \t\tlist\n"
> "      -w\twrite the current history to the history> file\n"
> "    \n"
> "      -p\tperform history expansion on each ARG and display the result\n"
> "    \t\twithout storing it in the history list\n"
> "      -s\tappend the ARGs to the history list as a single entry\n"
> "    \n"
> "    If FILENAME is given, it is used as the history file. Otherwise,\n"
> "    if HISTFILE has a value, that is used. If FILENAME is not supplied\n"
> "    and HISTFILE is unset or null, the -a, -n, -r, and -w options have\n"
> "    no effect and return success.\n"
> "    \n"
> "    The fc builtin also operates on the history list.\n"
> "    \n"
> "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
> "    as a format string for strftime(3) to print the time stamp> associated\n"
> "    with each displayed history entry.  No time stamps are printed otherwise."
> "\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success unless an invalid option is given or an error occurs."
> msgstr ""
> "Visualizza o manipola l'elenco della cronologia.\n"
> "    \n"
> "    Visualizza l'elenco della cronologia con i numeri di riga, aggiungendo a "
> "ciascuna voce\n"
> "    modificata il prefisso \"*\".  Un argomento pari a N elenca solo le "
> "ultime N voci.\n"
> "    \n"
> "    Opzioni:\n"
> "      -c\tPulisce la cronologia eliminando tutte le voci\n"
> "      -d posiz\tElimina la voce della cronologia alla posizione POSIZ.\n"
> "    \t\tPosizioni negative indicano di contare all'indietro dalla fine\n"
> "    \t\tdell'elenco della cronologia.\n"
> "    \n"
> "      -a\tAccoda righe al file della cronologia relative alla sessione "
> "attuale\n"
> "      -n\tLegge tutte le righe non ancora lette dal file della cronologia\n"
> "    \t\te le accodano all'elenco della cronologia\n"
> "      -r\tLegge il file della cronologia e ne accoda il contenuto all'elenco\n"
> "    \t\tdella cronologia\n"
> "      -w\tScrive la cronologia corrente nel file della cronologia\n"
> "    \n"
> "      -p\tEffettua l'espansione della cronologia su ciascun ARG e visualizza "
> "il\n"
> "    \t\trisultato senza memorizzarlo nell'elenco della cronologia\n"
> "      -s\tAccoda gli ARG all'elenco della cronologia come una voce singola\n"
> "    \n"
> "    Se viene fornito il NOMEFILE, viene usato come file della cronologia. \n"
> "    Altrimenti, se HISTFILE è valorizzato, viene usato quest'ultimo. Se\n\n"
> "    NOMEFILE non viene fornito, e HISTFILE non è settato oppure è null, le\n"
> "    opzioni -a, -n, -r e -w non hanno effetto e termina con successo.\n"
> "    \n"
> "    Se la variabile $HISTTIMEFORMAT è impostata e non è nulla, il suo valore "
> "viene usato\n"
> "    come una stringa di formato per strftime(3) per stampare l'orario "
> "associato a ciascuna\n"
> "    voce di cronologia visualizzata.  Altrimenti non viene stampato alcun "
> "orario.\n"
> "    \n"
> "    Il comando interno fc opera anche sull'elenco della cronologia.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo a meno che non sia fornita una opzione non valida o "
> "si riscontri un errore."

Alla riga
"    \t\te le accodano all'elenco della cronologia\n"
credo che accodare vada declinato al singolare.

Alla riga:
"    Altrimenti, se HISTFILE è valorizzato, viene usato quest'ultimo. Se\n\n"
c'è un ritorno a capo di troppo, credo.

[...]
> #: builtins.c:926
> msgid ""
> "Remove jobs from current shell.\n"
> "    \n"
> "    Removes each JOBSPEC argument from the table of active jobs. Without\n"
> "    any JOBSPECs, the shell uses its notion of the current job.\n"
> "    \n"
> "    Options:\n"
> "      -a\tremove all jobs if JOBSPEC is not supplied\n"
> "      -h\tmark each JOBSPEC so that SIGHUP is not sent to the job if the\n"
> "    \t\tshell receives a SIGHUP\n"
> "      -r\tremove only running jobs\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success unless an invalid option or JOBSPEC is given."
> msgstr ""
> "Rimuove job dalla shell corrente.\n"
> "    \n"
> "    Rimuove ciascun argomento SPECJOB dalla tabella dei job attivi. Senza "
> "alcun\n"
> "    SPECJOB, la shell usa la sua nozione del job corrente.\n"
> "    \n"
> "    Opzioni:\n"
> "      -a\tRimuove tutti i job se non viene fornito uno SPECJOB\n"
> "      -h\tMarca ciascun SPECJOB in modo che non venga inviato un SIGHUP al\n"
> "    \t\tjob se la shell lo riceve\n"
> "      -r\tRimuove solo i job in esecuzione\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo a meno che non venga fornita una opzione non valida\n"
> "    o uno SPECJOB."

Cambierei le ultime due righe perché sembra che ci sia un errore nel caso di opzione non valida,
oppure se viene fornito un qualsiasi SPECJOB; invece deve dare errore se c'è una opzione o una
SPECJOB non valida.

[...]
> #: builtins.c:945
> msgid ""
> "Send a signal to a job.\n"
> "    \n"
> "    Send the processes identified by PID or JOBSPEC the signal named by\n"
> "    SIGSPEC or SIGNUM.  If neither SIGSPEC nor SIGNUM is present, then\n"
> "    SIGTERM is assumed.\n"
> "    \n"
> "    Options:\n"
> "      -s sig\tSIG is a signal name\n"
> "      -n sig\tSIG is a signal number\n"
> "      -l\tlist the signal names; if arguments follow `-l' they are\n"
> "    \t\tassumed to be signal numbers for which names should be listed\n"
> "      -L\tsynonym for -l\n"
> "    \n"
> "    Kill is a shell builtin for two reasons: it allows job IDs to be used\n"
> "    instead of process IDs, and allows processes to be killed if the limit\n"
> "    on processes that you can create is reached.\n"
> "    \n"
> "    Exit Status:\n"
> "    Returns success unless an invalid option is given or an error occurs."
> msgstr ""
> "Invia un segnale a un job.\n"
> "    \n"
> "    Invia il segnale chiamato dallo SPECSEGN o dal NUMSEGN ai processi "
> "identificati\n"
> "    dal PID o dallo SPECJOB.  Se non è presente né lo SPECSEGN né il NUMSEGN,"
> " viene\n"
> "    allora considerato SIGTERM.\n"
> "    \n"
> "    Opzioni:\n"
> "      -s segn\tSEGN è il nome di un segnale\n"
> "      -n segn\tSEGN è il numero di un segnale\n"
> "      -l\telenca i nomi dei segnali; se ci sono argomenti dopo \"-l\"\n"
> "    \t\tvengono considerati come numeri di segnale di cui elencare i nomi\n"
> "      -L\tsinonimo di -l\n"
> "    \n"
> "    Kill è un comando interno di shell per due ragioni: permette di usare\n"
> "    gli ID dei job invece degli ID dei processi e permette di uccidere quei\n"
> "    processi che abbiano raggiunto un numero limite prefissato di processi\n"
> "    creabili.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Restituisce successo a meno che non sia fornita una opzione non valida o "
> "si riscontri un errore."

Alla riga
"    Invia il segnale chiamato dallo SPECSEGN o dal NUMSEGN ai processi "
togliere la preposizione articolata in questo modo:
"    Invia il segnale chiamato SPECSEGN o NUMSEGN ai processi "

e lo stessa anche dopo, ad esempio:
"    dal PID o dallo SPECJOB.  Se non è presente né lo SPECSEGN né il NUMSEGN,"
diventerebbe:
"    dal PID o dallo SPECJOB. Se non è presente né SPECSEGN né NUMSEGN,"

Questa parte invece è sbagliata:
"    Kill è un comando interno di shell per due ragioni: permette di usare\n"
"    gli ID dei job invece degli ID dei processi e permette di uccidere quei\n"
"    processi che abbiano raggiunto un numero limite prefissato di processi\n"
"    creabili.\n"

il limite di processi non è una caratteristica del processo, ma dell'utente
(o del container, ma quella è un'altra storia). Vale a dire che non può 
capitare che un processo abbia raggiunto il limite di processi. Invece capita 
che l'utente abbia un limite e lo raggiunga. In questo caso, se kill fosse un
comando esterno, la bash dovrebbe creare un processo per eseguirlo, ma questo 
fallirebbe a causa del limite. Invece in quanto comando interno, viene
eseguito dallo stesso processo della bash, senza incappare nel limite di processi.

[...]
> #: builtins.c:969
> msgid ""
> "Evaluate arithmetic expressions.\n"
> "    \n"
> "    Evaluate each ARG as an arithmetic expression. Evaluation is done in\n"
> "    fixed-width integers with no check for overflow, though division by 0\n"
> "    is trapped and flagged as an error.  The following list of operators is\n"
> "    grouped into levels of equal-precedence operators.  The levels are "
> "listed\n"
> "    in order of decreasing precedence.\n"
> "    \n"
> "    \tid++, id--\tvariable post-increment, post-decrement\n"
> "    \t++id, --id\tvariable pre-increment, pre- decrement\n"
> "    \t-, +\t\tunary minus, plus\n"
> "    \t!, ~\t\tlogical and bitwise negation\n"
> "    \t**\t\texponentiation\n"
> "    \t*, /, %\t\tmultiplication, division, remainder\n"
> "    \t+, -\t\taddition, subtraction\n"
> "    \t<<, >>\t\tleft and right bitwise shifts\n"
> "    \t<=, >=, <, >\tcomparison\n"
> "    \t==, !=\t\tequality, inequality\n"
> "    \t&\t\tbitwise AND\n"
> "    \t^\t\tbitwise XOR\n"
> "    \t|\t\tbitwise OR\n"
> "    \t&&\t\tlogical AND\n"
> "    \t||\t\tlogical OR\n"
> "    \texpr ? expr : expr\n"
> "    \t\t\tconditional operator\n"
> "    \t=, *=, /=, %=,\n"
> "    \t+=, -=, <<=, >>=,\n"
> "    \t&=, ^=, |=\tassignment\n"
> "    \n"
> "    Shell variables are allowed as operands.  The name of the variable\n"
> "    is replaced by its value (coerced to a fixed-width integer) within\n"
> "    an expression.  The variable need not have its integer attribute\n"
> "    turned on to be used in an expression.\n"
> "    \n"
> "    Operators are evaluated in order of precedence.  Sub-expressions in\n"
> "    parentheses are evaluated first and may override the precedence\n"
> "    rules above.\n"
> "    \n"
> "    Exit Status:\n"
> "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
> msgstr ""
> "Valuta espressioni aritmetiche.\n"
> "    \n"
> "    Valuta ciascun ARG come una espressione aritmetica.  La valutazione è\n"
> "    effettuata con interi a larghezza fissa senza alcun controllo sull'overflow,\n"
> "    sebbene la divisione per 0 sia catturata e contrassegnata come un errore.\n"
> "    Il seguente elenco di operatori è raggruppato per livelli di operatore\n"
> "    di uguale precedenza.  I livelli sono elencati in ordine di precedenza\n"
> "    decrescente.\n"
> "    \n"
> "    \tid++, id--\tIncremento e decremento successivo di variabile\n"
> "    \t++id, --id\tIncremento e decremento precedente di variabile\n"
> "    \t-, +\t\tMeno e più unari\n"
> "    \t!, ~\t\tNegazione logica e bit a bit\n"
> "    \t**\t\tEsponenziazione\n"
> "    \t*, /, %\t\tMoltiplicazione, divisione, resto\n"
> "    \t+, -\t\tAddizione, sottrazione\n"
> "    \t<<, >>\t\tScorrimento bit a bit sinistro e destro\n"
> "    \t<=, >=, <, >\tComparazione\n"
> "    \t==, !=\t\tUguaglianza, disuguaglianza\n"
> "    \t&\t\tAND bit a bit\n"
> "    \t^\t\tXOR bit a bit\n"
> "    \t|\t\tOR bit a bit\n"
> "    \t&&\t\tAND logico\n"
> "    \t||\t\tOR logico\n"
> "    \tespr ? espr : espr\n"
> "    \t\t\tOperatore condizionale\n"
> "    \t=, *=, /=, %=,\n"
> "    \t+=, -=, <<=, >>=,\n"
> "    \t&=, ^=, |=\tAssegnazione\n"
> "    \n"
> "    Le variabili di shell sono ammesse come operandi. Il nome della "
> "variabile è\n"
> "    sostituito dal suo valore (forzato a un intero a larghezza fissa) "
> "all'interno\n"
> "    di una espressione.  Non è necessario che la variabile abbia il proprio "
> "attributo\n"
> "    intero abilitato per essere usata in una espressione.\n"
> "    \n"
> "    Gli operatori sono valutati in ordine di precedenza.  Le sottoespressioni\n"
> "    tra parentesi sono valutate per prime e possono avere la precedenza sulle\n"
> "    regole sopradescritte.\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Se l'ultimo ARG viene valutato pari a 0 restituisce 1, altrimenti "
> "restituisce 0."

alla riga:
"    Il seguente elenco di operatori è raggruppato per livelli di operatore\n"
credo che la parola finale vada al plurale.

alle righe:
"    \tid++, id--\tIncremento e decremento successivo di variabile\n"
"    \t++id, --id\tIncremento e decremento precedente di variabile\n"
io non ho mai sentito parlare di incremento e decremento precedente o
successivo, ma magari è uso comune e io non lo so. Quello che ho sempre
sentito e letto è l'utilizzo delle formule latine pre- e post-, esattamente
come inglese.

[...]
> #: builtins.c:1014
> msgid ""
> "Read a line from the standard input and split it into fields.\n"
> "    \n"
> "    Reads a single line from the standard input, or from file descriptor FD\n"
> "    if the -u option is supplied.  The line is split into fields as with "
> "word\n"
> "    splitting, and the first word is assigned to the first NAME, the second\n"
> "    word to the second NAME, and so on, with any leftover words assigned to\n"
> "    the last NAME.  Only the characters found in $IFS are recognized as "
> "word\n"
> "    delimiters. By default, the backslash character escapes delimiter "
> "characters\n"
> "    and newline.\n"
> "    \n"
> "    If no NAMEs are supplied, the line read is stored in the REPLY variable."
> "\n"
> "    \n"
> "    Options:\n"
> "      -a array\tassign the words read to sequential indices of the array\n"
> "    \t\tvariable ARRAY, starting at zero\n"
> "      -d delim\tcontinue until the first character of DELIM is read, rather\n"
> "    \t\tthan newline\n"
> "      -e\tuse Readline to obtain the line\n"
> "      -E\tuse Readline to obtain the line and use the bash default\n"
> "    \t\tcompletion instead of Readline's default completion\n"
> "      -i text\tuse TEXT as the initial text for Readline\n"
> "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
> "    \t\tfor a newline, but honor a delimiter if fewer than\n"
> "    \t\tNCHARS characters are read before the delimiter\n"
> "      -N nchars\treturn only after reading exactly NCHARS characters, "
> "unless\n"
> "    \t\tEOF is encountered or read times out, ignoring any\n"
> "    \t\tdelimiter\n"
> "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
> "    \t\tattempting to read\n"
> "      -r\tdo not allow backslashes to escape any characters\n"
> "      -s\tdo not echo input coming from a terminal\n"
> "      -t timeout\ttime out and return failure if a complete line of\n"
> "    \t\tinput is not read within TIMEOUT seconds.  The value of the\n"
> "    \t\tTMOUT variable is the default timeout.  TIMEOUT may be a\n"
> "    \t\tfractional number.  If TIMEOUT is 0, read returns\n"
> "    \t\timmediately, without trying to read any data, returning\n"
> "    \t\tsuccess only if input is available on the specified\n"
> "    \t\tfile descriptor.  The exit status is greater than 128\n"
> "    \t\tif the timeout is exceeded\n"
> "      -u fd\tread from file descriptor FD instead of the standard input\n"
> "    \n"
> "    Exit Status:\n"
> "    The return code is zero, unless end-of-file is encountered, read times "
> "out\n"
> "    (in which case it's greater than 128), a variable assignment error "
> "occurs,\n"
> "    or an invalid file descriptor is supplied as the argument to -u."
> msgstr ""
> "Legge una riga dallo standard input e la divide in campi.\n"
> "    \n"
> "    Legge una singola riga dallo standard input o, se viene fornita "
> "l'opzione -u,\n"
> "    dal descrittore di file FD.  La riga è divisa in campi corrispondenti a\n"
> "    parole dove la prima parola è assegnata al primo NOME, la seconda "
> "parola\n"
> "    al secondo NOME e così via, con ciascuna parola rimanente assegnata al\n"
> "    corrispondente ultimo NOME. Sono riconosciuti come delimitatori di "
> "parola\n"
> "    solo quelli presenti in $IFS. Come impostazione predefinita, il carattere\n"
> "    backslash viene usato come escape per i caratteri delimitatore e\n"
> "    \"a capo\".\n"
> "    \n"
> "    Se non viene fornito alcun NOME, la riga letta è memorizzata nella "
> "variabile REPLY.\n"
> "    \n"
> "    Opzioni:\n"
> "      -a array\tAssegna le parole lette agli indici sequenziali della "
> "variabile\n"
> "    \t\tdi ARRAY, iniziando da zero\n"
> "      -d delim\tContinua fino alla lettura del primo carattere di DELIM, "
> "invece\n"
> "    \t\tdi un ritorno a capo \n"
> "      -e\tUsa Readline per ottenere la riga\n"
> "      -E\tUsa Readline per ottenere la riga, e utilizza il completamento\n"
> "    \t\tpredefinito d bash anziché quello predefinito di Readline\n"
> "      -i testo\tUsa TESTO come testo iniziale per Readline\n"
> "      -n ncarat\tRitorna dopo la lettura di NCARAT caratteri invece di "
> "attendere\n"
> "    \t\tun a capo, ma rispetta un delimitatore se vengono letti meno di\n"
> "    \t\tNCARAT caratteri prima del delimitatore stesso\n"
> "      -N ncarat\tRitorna solo dopo la lettura di NCARAT caratteri esatti, a "
> "meno che non si\n"
> "    \t\triscontri un EOF o un time out di lettura, ignorando qualsiasi\n"
> "    \t\tdelimitatore\n"
> "      -p stringa\tVisualizza la stringa PROMPT senza un a capo finale prima\n"
> "    \t\tdel tentativo di lettura\n"
> "      -r\t\tNon ammette backslash per fare l'escape dei caratteri\n"
> "      -s\t\tNon fa l'echo dell'input proveniente da un terminale\n"
> "      -t secondi\tVa in timeout e restituisce insuccesso se non viene letta\n"
> "    \t\tuna riga di input completa entro i SECONDI forniti. Il valore della\n"
> "    \t\tvariabile TMOUT è il timeout predefinito.  SECONDI può essere\n"
> "    \t\tuna frazione. Se SECONDI è pari a 0, la lettura termina immediata-\n"
> "    \t\tmente, senza provare a leggere dati, restituendo successo\n"
> "    \t\tsolo se l'input è disponibile sul descrittore di file specificato.\n"
> "    \t\tSe viene superato il timeout lo stato di uscita è maggiore di 128\n"
> "      -u fd\t\tLegge dal descrittore di file FD invece che dallo standard "
> "input\n"
> "    \n"
> "    Stato di uscita:\n"
> "    Il codice restituito è zero a meno che non sia riscontrato un EOF, un\n"
> "    timeout in lettura (nel qual caso sarà maggiore di 128), un errore di\n"
> "    assegnazione di variabili, o venga fornito un descrittore di file non\n"
> "    valido come argomento per -u."

Alle righe:
"    al secondo NOME e così via, con ciascuna parola rimanente assegnata al\n"
"    corrispondente ultimo NOME. Sono riconosciuti come delimitatori di "
credo che in questo caso non ci sia una corrispondenza degli argomenti rimasti,
appunto, senza variabile corrispondente. Quindi cambierei la frase in questo modo:
"    al secondo NOME e così via, con ciascuna parola rimanente assegnata\n"
"    all'ultimo NOME. Sono riconosciuti come delimitatori di "

Alle righe:
"      -a array\tAssegna le parole lette agli indici sequenziali della "
"variabile\n"
"    \t\tdi ARRAY, iniziando da zero\n"
se non ho capito male, ARRAY è un segnaposto per una variabile di tipo vettore.
In questo caso non direi «variabile di ARRAY», ma «variabile ARRAY». 

Inoltre, hai usato varie volte NCARAT come segnaposto, ma nell'altra stringa
tradotta, che riporto qui, hai usato, due volte, ncaratt con due «t»:

msgid ""
"read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
"prompt] [-t timeout] [-u fd] [name ...]"
msgstr ""
"read [-Eers] [-a array] [-d delim] [-i testo] [-n ncaratt] [-N ncaratt] [-p "
"stringa] [-t secondi] [-u fd] [nome ...]"

[...]



Maggiori informazioni sulla lista tp