我必须拆分一个URL字符串并将变量分配给少数分裂。这是字符串
http://web.com/sub1/sub2/sub3/sub4/sub5/sub6
我想从bash中分配如下变量
var1=sub2
var2=sub4
var3=sub5
如何在bash中执行此操作?
答案 0 :(得分:6)
x="http://web.com/sub1/sub2/sub3/sub4/sub5/sub6"
IFS="/" read -r foo foo foo foo var1 foo var2 var3 foo <<< "$x"
echo "$var1 $var2 $var3"
输出:
sub2 sub4 sub5
或者使用数组:
x="http://web.com/sub1/sub2/sub3/sub4/sub5/sub6"
IFS="/" read -r -a var <<< "$x"
echo "${var[4]}"
declare -p var
输出:
sub2 declare -a var='([0]="http:" [1]="" [2]="web.com" [3]="sub1" [4]="sub2" [5]="sub3" [6]="sub4" [7]="sub5" [8]="sub6")'
来自man bash
:
IFS
:内部字段分隔符,用于扩展后的单词拆分,并使用read builtin命令将行拆分为单词。
答案 1 :(得分:3)
这应该有效:
IFS=/ read -r proto host dummy var1 dummy var2 var3 dummy <<< "$url"
或read -ra
读入数组。 read -r
使反斜杠变得非特殊。
这在bash中不起作用:
echo "$url" | read ...
因为read
会在子shell中运行so the variables wouldn't be set in the parent shell。
答案 2 :(得分:0)
我认为更好的解决方案是将拆分结果分配到数组中。例如:
IFS='/' read -a array <<< "http://web.com/sub1/sub2/sub3/sub4/sub5/sub6"
不幸的是,这会产生3&#39;无关的&#39;元素,你将不得不照顾!
echo ${array[*]}
http: web.com sub1 sub2 sub3 sub4 sub5 sub6
编辑:在这里$ {array [1]}是一个空元素!