2013-11-12 4 views
1

код

s='id;some text here with possible ; inside' 
IFS=';' read -r id string <<< "$s" 
echo "$id" 

ошибка

restore.sh: 2: restore.sh: Syntax error: redirection unexpected 

Баш версия GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)ш - Разбивает строку по разделителю

+0

Работает на меня в GNU bash, версия 4.2.45 (1) -release (x86_64-pc-linux-gnu) ' – fedorqui

ответ

7

Вы, кажется, использует sh для выполнения сценария. Herestrings не поддерживаются в sh; следовательно, ошибка.

Убедитесь, что вы используете bash для выполнения сценария.

+0

В чем разница между sh и bash? – clarkk

+1

@clarkk [Разница между sh и bash] (http://stackoverflow.com/questions/5725296/difference-between-sh-and-bash) –

+1

Некоторые дистрибутивы Linux используют 'dash' (а не' bash') как оболочку который реализует 'sh'. 'dash' (в основном?) ограничено функциями, указанными в спецификации POSIX, без дополнительных функций, таких как' <<<', реализованных 'bash'. – chepner

-1

Я использовал python2.7 ниже:

#!/bin/sh 

s='id;some text here with possible ; inside' 
python -c "ifc, s =';', '$s';print s.split(';')[0] if ifc in s else ''" 

Результат:

$ ./test.sh 
id 
6

А вот строка это просто ярлык для маленького здесь документа. Это должно работать в любой POSIX оболочке:

s='id;some text here with possible ; inside' 
IFS=';' read -r id string <<EOF 
$s 
EOF 
echo "$id" 
0

Мой результат:

[[email protected] ~]# bash --version 
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu) 
Copyright (C) 2005 Free Software Foundation, Inc. 
[[email protected] ~]# ./bash 
id 
[[email protected] ~]# cat bash 
s='id;some text here with possible ; inside' 
IFS=';' read -r id string <<< "$s" 
echo "$id" 

работал здесь.

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