sh - 通过分隔符拆分字符串

时间:2013-11-12 13:44:12

标签: linux bash sh herestring

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

bash版本GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)

5 个答案:

答案 0 :(得分:8)

这里的字符串只是一个小文档的快捷方式。这适用于任何POSIX shell:

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

答案 1 :(得分:6)

您似乎正在使用sh来执行脚本。 sh不支持Herestrings;因此错误。

确保您使用bash执行脚本。

答案 2 :(得分:0)

我的结果:

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

在这里工作。

答案 3 :(得分:0)

将其保存为文件拆分

#!/bin/sh

string=$1
c=0

while [ $c -le $3 ] 
do

val1=`echo "$string" |sed 's/\(^[^'$2']*\)\('$2'\+\)\(.*$\)/\1/'`
string=`echo "$string" |sed 's/\(^[^'$2']*\)\('$2'\+\)\(.*$\)/\3/'`

if [ "$val1" == "$string" ]
then
string=''
fi

if [ "$val1" == "" ]
then
let c=$3
fi

let c=c+1

done

echo $val1 

它起作用:

root@IPHONE:~# ./split 'a;b;c' ';' 0
a
root@IPHONE:~# ./split 'a/b/c' '\/' 0
a
root@IPHONE:~# ./split 'a/b/c' '\/' 2
c
root@IPHONE:~# ./split 'a/b/c' '\/' 1
b

答案 4 :(得分:-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