Sto provando a stampare -nusando il echocomando. 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 -nusando il echocomando. 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 echointerpreta il -ncome 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 echonon stampare una nuova riga con -n, quindi di interpretare le barre rovesciate con -ee aggiungere esplicitamente la nuova riga.
$ echo -ne '-n\n'
-nIn 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 revcomando stampa semplicemente il suo output invertito.
Usa lo strumento giusto per il lavoro
$ printf -- '-n\n'
-ngrep '^-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 printfinvece:
% 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é -nviene 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, -nfoonon è così che verrà stampato.
man echoha. Ma helpè un po 'meglio.
/bin/echoè una cosa completamente diversa e quando corri echoin bash, ottieni l'integrato che può essere molto diverso a seconda della tua shell.
Penso che se vuoi assolutamente usare echosolo, questo dovrebbe soddisfarti:
echo "-n "
Questo funziona perché while -nè un'opzione valida per echo, -ncon uno spazio dopo non lo è. Dal momento che non è un'opzione, la echostampa e basta.
Ragazzi, state davvero pensando troppo.
echo -e \\055n
O senza newline finali
echo -en \\055n
printf "-n\n" un ripensamento?
/bin/echoalmeno 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 printfinvece l' uso ove disponibile. Questa pagina di riferimento fornisce maggiori dettagli e spiega molto bene quando e come echoe come printfdovrebbero 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 è echoun -personaggio e un npersonaggio.
-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)?