如何在BASH中获取字符串的一部分
我的代码 如何从var FOO获得“bbb”如何在BASH中获取字符串的一部分,bash,Bash,我的代码 如何从var FOO获得“bbb” FOO="aaa;bbb;ccc" echo ${FOO##*;} # Result: ccc echo ${FOO%%;*} # Result: aaa 谢谢没有明确的运算符。此外,不能嵌套这些运算符(请参见) 因此,您应该为作业使用一些临时变量: echo ${FOO???*} # Result: bbb 或者您应该将其转换为数组 为存档编辑,感谢您的评论。根据,您可以使用和%分词结构 FOO="aaa;bbb;ccc" tmp=${FOO
FOO="aaa;bbb;ccc"
echo ${FOO##*;} # Result: ccc
echo ${FOO%%;*} # Result: aaa
谢谢没有明确的运算符。此外,不能嵌套这些运算符(请参见) 因此,您应该为作业使用一些临时变量:
echo ${FOO???*} # Result: bbb
或者您应该将其转换为数组
为存档编辑,感谢您的评论。根据,您可以使用
和%
分词结构
FOO="aaa;bbb;ccc"
tmp=${FOO%;*}
tmp=${tmp#*;}
echo $tmp
产生:
FOO="aaa;bbb;ccc"
split=${FOO%;*}
final=${split#*;}
echo $final
FOO="aaa;bbb;ccc"
IFS=";" read field1 field2 field3 <<< "$FOO"
echo $field1 $field2 $field3
或者,可以使用设置为分号的IFS
bash字段分隔符变量根据字段分割输入。这可能更易于使用,并允许您使用一行代码获取第二个字段的值
bbb
这并不能很好地概括,但是提取了3的中间部分
代码>-分隔字段可以通过以下方式完成:
aaa bbb ccc
将其分解为多个步骤可以更容易地了解其工作原理:
$ shopt -s extglob
$ FOO=aaa;bbb;ccc
$ echo ${FOO//+(${FOO##*;}|${FOO%%;*}|;)}
bbb
另一种方式。将$FOO指定给位置参数:
$ C=${FOO##*;} # ccc
$ A=${FOO%%;*} # aaa
$ echo ${FOO//+($A|$C|;)} # Removes every occurance of $A, $C, or ; from FOO
您必须通过bash参数扩展来完成吗,或者使用awk是否可以接受?请不要使用awk,bash纯语言。谢谢,这会根据需要打印aaa
,而不是bbb
。使用单个%
和
代替%
和
IFS=';'
set -- $FOO
echo "$2"