2016-07-04 41 views
1

通过拆分一个字符串分隔的字符串我试图分裂这样的字符串:在bash

file1 -> file2 

,并期望影响“文件1”和“文件2”到2个变量。

我试图与IFS,但它似乎只为一个字符长的工作(使用IFS =“ - >”我得到的‘文件1’和‘>文件2’......

基于this article,我尝试另一个做法:

awk 'BEGIN {FS=" -> "} {xxx}' <<< $f 

的问题是,我没有成功影响到了$ 1,$ 2,我以后可以用一个变量...

回答

1

您可以通过几种方式做到这一点:

str="file1 -> file2" 

echo "Fast" 
var1="${str% -> *}" 
var2="${str#* -> }" 
printf "%s=%s.\n" var1 "${var1}" var2 "${var2}" 

echo "With cut" 
var1="$(echo ${str}|cut -d" " -f1)" 
var2="$(echo ${str}|cut -d" " -f3)" 
printf "%s=%s.\n" var1 "${var1}" var2 "${var2}" 

echo "With read" 
read -r var1 arrow var2 <<< ${str} 
+0

非常清楚。非常感谢你! – Sharcoux

+0

你从哪里找到了阅读的那个?我没有找到文档,“man read”没有太多帮助...... – Sharcoux

+0

我在SO的某个地方了解到了这一点,也许是http://stackoverflow.com/a/19052249/3220113。 –

1

您可以使用$()

VARIABLE="$(awk 'BEGIN {FS=" -> "} {for(i=1;i<=NF;i++)print $i}' <<< $f)" 

您可以将结果赋予一个数组:

ARRAY=($(awk 'BEGIN {FS=" -> "} {for(i=1;i<=NF;i++)print $i}' <<< $f)) 

,并提取值作为独立变量:

${ARRAY[0]} 
${ARRAY[1]} 
and so on... 

并将其分配给您的变量。

+0

我明白,我怎么可以打印,但我怎么能在脚本以后使用它? – Sharcoux