5

给定先前在 shell 脚本中定义的 $LINE,我执行以下操作

var1=$(echo $LINE | cut -d, -f4)
var2=$(echo $LINE | cut -d, -f5)
var3=$(echo $LINE | cut -d, -f6)

我有什么办法可以将它组合成一个命令,剪切只运行一次?就像是

var1,var2,var3=$(echo $LINE | cut -d, -f4,5,6)
4

2 回答 2

9

内置read命令可以分配给多个变量:

IFS=, read _ _ _ var1 var2 var3 _ <<< "$LINE"
于 2012-12-22T04:10:53.180 回答
4

是的,如果你对数组没问题:

var= ( $(echo $LINE | cut -d, --output-delimiter=' ' -f4-6) )

请注意,这会使var0-indexed。

尽管将 CSV 转换为 bash 括号可以理解的内容可能会更快更容易$LINE,然后只需执行var = ( $LINE ).

编辑:如果您的 $LINE 中有空格,上述内容会导致问题...如果是这样,您需要更加小心,而 AWK 可能是添加引号的更好选择:

var= ( $( echo $LINE | awk IFS=, '{print "\"$4\" \"$5\" \"$6\""}' ) )
于 2012-12-21T23:06:27.473 回答