2016-07-25 4 views
1

У меня есть переменное окружениеunix оболочка сценарий синтаксис проблема?

net_connect="@oradb" 

Так что я пытаюсь сохранить это значение в другом переменном окружение без символа @

Так делает это, кажется, работает:

echo "test=" $net_connect | cut -d "@" -f2 
test=oradb 

Теперь, если Я делаю это, я получаю:

SID=`$net_connect | cut -d "@" -f2` 
echo "SID=" $SID 
SID= 

Почему мой вывод пуст?

+0

Ваша первая строка связывает такие команды: PIPE 'echo test = $ net_connect' STDOUT INTO' cut -d @ -f2' STDIN. Я не знаю, как он работает в вашей оболочке. Моя возвращает 'oradb' – Pandaiolo

ответ

4

Для удаления @ используйте удаление префикса:

$ net_connect="@oradb" 
$ sid="${net_connect#@}" 
$ echo "$sid" 
oradb 

Примечания:

  1. В общем, ${variable#prefix} удаляет Glob prefix из variable. Для получения дополнительной информации, откройте man bash и выполните поиск по Remove matching prefix pattern

  2. В оболочке лучше всего использовать переменные в смешанном или нижнем регистре. Если вы используете имена переменных верхнего регистра, то в конечном итоге вы случайно замените одну из переменных системы, и результаты будут неприятными.

  3. Следующая команда не делает то, что вы надеетесь:

    SID=`$net_connect | cut -d "@" -f2` 
    

    Он запускает команду и отправляет его в стандартный вывод cut. Но, нет, скорее всего, нет такой команды, а оболочка будет выдавать сообщение об ошибке, такие как:

    bash: @oradb: command not found 
    

    Если вы действительно хотите использовать cut, то:

    sid=$(echo "$net_connect" | cut -d "@" -f2) # This works but prefix removal is simpler 
    
2

Поскольку вы выполнения переменная, не повторяя его:

$net_connect | etc...

сводится до

@oradb | etc... 

который является ошибкой синтаксиса. У вас нет команды/binary с именем @oradb.

Может быть, вы хотели

SID=`echo $net_connect | cut -d "@" -f2` 

вместо этого.

Смежные вопросы