Bash 将多个切割命令组合为变量指定,形成一个切割命令

Bash 将多个切割命令组合为变量指定,形成一个切割命令,bash,shell,Bash,Shell,给定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) 是的,如果您对阵列满意: var= ( $(echo $LINE | cut -d, -

给定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)

是的,如果您对阵列满意:

var= ( $(echo $LINE | cut -d, --output-delimiter=' ' -f4-6) )
请注意,这使得
var
0索引化

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

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

var= ( $( echo $LINE | awk IFS=, '{print "\"$4\" \"$5\" \"$6\""}' ) )

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

IFS=, read _ _ _ var1 var2 var3 _ <<< "$LINE"

IFS=,read var1 var2 var3正是我要找的。我不知道($LINE)的东西把一切都变成了一个数组。谢谢。这是个糟糕的回答。不使用wordsplit命令替换输出。另外,由于赋值语法不正确,它一开始就不起作用。这肯定是最好的答案,只是你假设只有6个字段。也许
read\uuuuvar1 var2 var3
更合适?