我有一个类似于此代码GET="start from '12345' and continue"
的字符串,现在我想要做的是从变量GET中提取单引号之间的值,并使用bash脚本将它们存储在变量上。
答案 0 :(得分:2)
您可以将read
与自定义IFS
:
GET="start from '12345' and continue"
IFS="'" read _ b _ <<< "$GET"
echo "$b"
12345
答案 1 :(得分:1)
使用参数扩展:
#!/bin/bash
GET="start from '12345' and continue"
value=${GET#*\'}
value=${value%\'*}
echo $value
或者,使用数组和$ IFS:
value=$(
IFS=\'
arr=($GET)
echo ${arr[1]}
)
echo $value
答案 2 :(得分:0)
很多事情都适用于此。尝试:
echo $GET | grep -o \'.*\'
提供两个单引号之间的确切内容匹配。如果要将其存储在变量中:
myvar=$(echo $GET | grep -o \'.*\')
答案 3 :(得分:0)
由于还没有人提到它,另一种可能性是使用bash正则表达式:
$ re="'([^']*)'"
$ [[ $GET =~ $re ]] && echo "${BASH_REMATCH[1]}"
12345
答案 4 :(得分:0)
如果你想避免使用bashism(即制作POSIX shell),你可以使用sed:
echo "$GET" | sed -n " s,[^']*'\([^']*\).*,\1,p "
12345
(BTW我的首选解决方案是来自Tom Fenech的解决方案)