Sto provando a stampare -n
usando il echo
comando. Ma se scrivo semplicemente echo -n
, emette solo una nuova riga, non si presenta -n
, ma emette una nuova riga.
getopt
(???) per analizzare la riga di comando
Sto provando a stampare -n
usando il echo
comando. Ma se scrivo semplicemente echo -n
, emette solo una nuova riga, non si presenta -n
, ma emette una nuova riga.
getopt
(???) per analizzare la riga di comando
Risposte:
Il problema è che echo
interpreta il -n
come argomento. Nell'implementazione predefinita di bash, ciò significa (da help echo
):
-n do not append a newline
Esistono vari modi per aggirare questo:
Trasformalo in qualcosa che non è un'opzione includendo un altro personaggio. Ad esempio, dire di echo
non stampare una nuova riga con -n
, quindi di interpretare le barre rovesciate con -e
e aggiungere esplicitamente la nuova riga.
$ echo -ne '-n\n'
-n
In alternativa, includi solo uno spazio
$ echo " -n"
-n
Ciò, tuttavia, aggiunge uno spazio che probabilmente non vuoi.
Utilizzare un carattere non stampabile prima di esso. Qui. Sto usando il backspace ( \b
)
$ echo -e "\b-n"
-n
Questo aggiunge anche un personaggio extra che probabilmente non vuoi.
Usa l'inganno
$ echo n- | rev
-n
Il rev
comando stampa semplicemente il suo output invertito.
Usa lo strumento giusto per il lavoro
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
è la strada da percorrere, davvero.
printf
è meglio comunque, ma la domanda riguarda solo echo
.
echo -e "-n\c"
faccia esattamente la cosa.
\c
è soppresso ulteriore output
A volte è una buona idea usare lo strumento giusto. È possibile utilizzare printf
invece:
% printf "-n\n"
-n
echo
, mentre printf
è meglio standardizzata .
È possibile utilizzare questo comando, ma aggiunge uno spazio aggiuntivo.
echo -e "\r-n"
Questa è una specie di hack.
-e
abilita i simboli del comando barra rovesciata.
\r
è un ritorno a capo.
In realtà qualsiasi \
carattere valido farà in qualsiasi luogo della stringa.
Puoi vedere quali sono validi per help echo
.
echo "-n"
non funziona perché -n
viene utilizzato come parametro perecho
.
PS La soluzione migliore è IMHO
echo -e "-n\c"
Non aggiunge altri caratteri .
echo -e "-n\n"
stampa lo stesso ma con un nuovo carattere di linea.
-n
è valido, -nfoo
non è così che verrà stampato.
man echo
ha. Ma help
è un po 'meglio.
/bin/echo
è una cosa completamente diversa e quando corri echo
in bash, ottieni l'integrato che può essere molto diverso a seconda della tua shell.
Penso che se vuoi assolutamente usare echo
solo, questo dovrebbe soddisfarti:
echo "-n "
Questo funziona perché while -n
è un'opzione valida per echo
, -n
con uno spazio dopo non lo è. Dal momento che non è un'opzione, la echo
stampa e basta.
Ragazzi, state davvero pensando troppo.
echo -e \\055n
O senza newline finali
echo -en \\055n
printf "-n\n"
un ripensamento?
/bin/echo
almeno se invocato comeecho -e "\055n"
Per estendere la risposta di @ AB, l'unico modo portatile da utilizzare echo
è di astenersi dall'utilizzare qualsiasi opzione simile -n
. Considera printf
invece l' uso ove disponibile. Questa pagina di riferimento fornisce maggiori dettagli e spiega molto bene quando e come echo
e come printf
dovrebbero essere usati:
Al giorno d'oggi, echo (1) è portatile solo se si omettono flag e si evitano le sequenze. Usa invece printf (1), se hai bisogno di qualcosa di più del semplice testo.
Nello script Bash puoi eseguire:
echo -n -
echo n
O in guscio interattivo:
echo -n - ; echo n
Questo è echo
un -
personaggio e un n
personaggio.
-pilot6@Pilot6:~$
. Le seconde uscite n
.
&&
- Non direi davvero che questa risposta è sbagliata .
Puoi correre
printf -n;echo
Testato in Busybox Ash
ash
è il nome di Almquist Shell.
echo -n -- -n
(non hai alcuna Linux box a portata di test)?