URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8598
[ Назад ]

Исходное сообщение
"Замена строк в bash-e "

Отправлено Сергей , 26-Янв-10 01:22 
Такой код написан в скрпте script.sh

#!/bin/sh
#!/usr/local/bin/bash
str="a-a-a-"
echo $str
echo ${str//-/}

результат выполнения: ./script.sh: ${str/...}: Bad substitution

В чем загвоздка? Кто-нибудь понимает?
Спасибо за ответ


Содержание

Сообщения в этом обсуждении
"Замена строк в bash-e "
Отправлено Сергей , 26-Янв-10 01:27 
>[оверквотинг удален]
>#!/bin/sh
>#!/usr/local/bin/bash
>str="a-a-a-"
>echo $str
>echo ${str//-/}
>
>результат выполнения: ./script.sh: ${str/...}: Bad substitution
>
>В чем загвоздка? Кто-нибудь понимает?
>Спасибо за ответ

Можно конечно запускать bash ./script.sh и тогда работает... но не понятно почему не работает без явного указания bash


"Замена строк в bash-e "
Отправлено jd , 26-Янв-10 04:35 
>>результат выполнения: ./script.sh: ${str/...}: Bad substitution
>>
>Можно конечно запускать bash ./script.sh и тогда работает... но не понятно почему
>не работает без явного указания bash

Потому что "${str//-/}" - это конструкция bash, но не sh. Bash предоставляет значительно больший функционал, нежели стандартный sh. Так как первой строкой у вас указан /bin/sh, то именно он и пытается выполнять скрипт, а такой конструкции он не знает. Укажите в качестве исполнителя скрипта (первая строка) bash и будет вам счастье.

P.S. А вторая строка у вас вообще непонятно, зачем. Каково её назначение?