将多个剪切命令组合到一个剪切命令中的变量分配中

sac*_*ine 4 bash shell

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

var1=$(echo $LINE | cut -d, -f4)
var2=$(echo $LINE | cut -d, -f5)
var3=$(echo $LINE | cut -d, -f6)
Run Code Online (Sandbox Code Playgroud)

我有什么方法可以将它组合成一个命令,其中切割仅运行一次?就像是

var1,var2,var3=$(echo $LINE | cut -d, -f4,5,6)
Run Code Online (Sandbox Code Playgroud)

gle*_*man 8

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

IFS=, read _ _ _ var1 var2 var3 _ <<< "$LINE"
Run Code Online (Sandbox Code Playgroud)

  • 绝对是最好的答案,只不过您假设只有 6 个字段。也许“read _ _ _ var1 var2 var3 _”更合适? (2认同)

zeb*_*h49 4

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

var= ( $(echo $LINE | cut -d, --output-delimiter=' ' -f4-6) )
Run Code Online (Sandbox Code Playgroud)

请注意,make var0 索引。

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

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

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