2012-01-22 17 views
11

ho novizio in script bash ma io non uderstand motivo per cui non è un lavoroString in bash - bad errore sostituzione

#!/bin/bash 
foo=foobarfoobar 
echo ${foo//bar/baz} 

errore sostituzione male sulla linea 3

+0

Funziona bene sul mio guscio. Qual è la tua shell predefinita? –

+0

Se stai provando a fare una sostituzione, sostituendo la barra con baz, allora è corretto. Funziona sulla mia macchina, stampando foobazfoobaz, con bash 3.2.48. –

+0

GNU bash, versione 4.2.10 (1) -release funziona in riga di comando ma non nello script – Aristarhys

risposta

48

Questa sostituzione funziona bene in Bash 4.2.8 (e sembra soddisfacente secondo il fare documen tazione).

La mia ipotesi migliore sarebbe che in realtà non stai utilizzando Bash: come stai invocando la sceneggiatura? Se stai facendo sh script.sh potresti farlo funzionare con Dash o qualcosa di simile (e Dash in effetti dà un errore di sostituzione sulla riga 3). Prova a eseguirlo esplicitamente con Bash (bash script.sh).

Se si scopre in realtà si sta utilizzando Dash, non c'è alcune informazioni utili sulle differenze e come tornare ad usare Bash (se si vuole) qui: https://wiki.ubuntu.com/DashAsBinSh

+0

GNU bash, versione 4.2.10 (1) -release – Aristarhys

+0

se faccio la stessa cosa in linea di comando funziona – Aristarhys

+0

scrivo bash test e inizia a lavorare – Aristarhys

-1
$ foo=foobarfoobar 
$ echo ${foo}/bar/baz 
foobarfoobar/bar/baz 

Solo che avete le graffe nel posto sbagliato, ma poi non sono un esperto di BASH, quindi forse questo non è l'effetto che stai per ..

+0

$ {foo // bar/baz} deve sostituire tutte le barre con baz, quindi echo sarà foobazfoobaz http://tldp.org/LDP/abs/html/string-manipulation.html – Aristarhys

+2

OP è facendo la sostituzione globale usando '//'. Non penso che voglia aggiungere 'bar/baz' alla sua variabile. Sta cercando di sostituire occorrenze di 'bar' con' baz' in modo che il suo output assomigli a 'foobazfoobaz' –

+0

yeah in ogni articolo di manipolazione delle stringhe bash usa tale codice ma non funziona per me – Aristarhys

Problemi correlati