2012-01-22 10 views
11

I novato en bash scripting pero no uderstand por lo que no es trabajocadena en bash - mal error de sustitución

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

error de sustitución mal en la línea 3

+0

Funciona bien en mi concha. ¿Cuál es tu caparazón predeterminado? –

+0

Si está tratando de hacer una sustitución, reemplazando la barra con baz, entonces esto es correcto. Funciona en mi máquina, imprime foobazfoobaz, con bash 3.2.48. –

+0

GNU bash, versión 4.2.10 (1): libera la línea de comandos pero no en el script – Aristarhys

Respuesta

48

Esa sustitución funciona bien en Bash 4.2.8 (y se ve bien según el do cumentación).

Creo que no estás usando Bash, ¿cómo estás invocando el guión? Si está haciendo sh script.sh, puede estar ejecutándolo con Dash o algo similar (y Dash sí da un error de sustitución en la línea 3). Intente ejecutarlo explícitamente con Bash (bash script.sh).

Si resulta que en realidad se está utilizando Dash, hay un poco de información útil sobre las diferencias y cómo volver a usar Bash (si quieres) aquí: https://wiki.ubuntu.com/DashAsBinSh

+0

GNU bash, versión 4.2.10 (1) -release – Aristarhys

+0

si hago lo mismo en la línea de comandos es – Aristarhys

+0

escribo prueba de bash y comienza a trabajar – Aristarhys

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

Así que usted tiene las llaves en el lugar equivocado, pero entonces no soy un experto en BASH, así que quizás este no es el efecto que estás buscando ...

+0

$ {foo // bar/baz} debe reemplazar todas las barras a baz, por lo que echo será foobazfoobaz http://tldp.org/LDP/abs/html/string-manipulation.html – Aristarhys

+2

OP es haciendo una sustitución global usando '//'. No creo que quiera agregar 'bar/baz' a su variable. Él está buscando reemplazar las apariciones de 'bar' con' baz' para que su salida se vea como 'foobazfoobaz' –

+0

sí en cada artículo de manipulación de cadenas de bash use dicho código pero no funciona para mí – Aristarhys

Cuestiones relacionadas