鉴于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)
答案 0 :(得分:8)
内置read
命令可以分配给多个变量:
IFS=, read _ _ _ var1 var2 var3 _ <<< "$LINE"
答案 1 :(得分:4)
是的,如果你对阵列没问题的话:
var= ( $(echo $LINE | cut -d, --output-delimiter=' ' -f4-6) )
请注意,将var
设为0索引。
虽然将CSV $LINE
转换为bash括号可理解的内容可能会更快更容易,然后只需执行var = ( $LINE )
。
编辑:如果你的$ LINE中有空格,上面会引起问题...如果是这样,你需要更加小心,并且AWK可能是添加引号的更好选择:
var= ( $( echo $LINE | awk IFS=, '{print "\"$4\" \"$5\" \"$6\""}' ) )