如何用Bash脚本的cut/awk工具解析空格分隔的字符串
解析空格分隔字符串为变量的几种方法
嗨,这事儿好办!我给你整理了几种用cut、awk甚至Bash原生命令实现的方法,都能把字符串"30 2 *"拆成三个变量a、b、c,最终输出a=30 b=2 c=*:
方法1:用Bash原生read命令(最简洁)
如果只是简单的空格分隔场景,read命令是最直接的选择,它默认就按空白字符(空格、制表符等)拆分字符串:
# 定义目标字符串 str="30 2 *" # 直接将三个字段赋值给变量a、b、c read a b c <<< "$str" # 验证输出 echo "a=$a b=$b c=$c"
执行后就能得到你想要的结果,而且完全不需要额外工具,效率很高。
方法2:用awk工具提取字段
awk是处理文本的利器,它天生擅长按字段拆分内容,这里我们可以直接通过$1、$2、$3分别获取三个空格分隔的字段:
方式A:分别提取每个变量
str="30 2 *" a=$(echo "$str" | awk '{print $1}') b=$(echo "$str" | awk '{print $2}') c=$(echo "$str" | awk '{print $3}') echo "a=$a b=$b c=$c"
方式B:一次处理完成所有变量赋值(更高效)
如果不想多次调用awk,可以用进程替换一次性拿到所有字段:
str="30 2 *" read a b c < <(echo "$str" | awk '{print $1, $2, $3}') echo "a=$a b=$b c=$c"
方法3:用cut工具拆分字段
cut是轻量的字段提取工具,只需要指定分隔符为空格,再通过-f参数指定字段序号即可:
str="30 2 *" a=$(echo "$str" | cut -d' ' -f1) b=$(echo "$str" | cut -d' ' -f2) c=$(echo "$str" | cut -d' ' -f3) echo "a=$a b=$b c=$c"
这里要注意:-d' '表示用单个空格作为分隔符,如果字符串里有多个连续空格,cut可能会把它们当成多个分隔符,这时候read或awk的表现会更友好(它们会自动忽略连续空白)。
内容的提问来源于stack exchange,提问作者Anshu Priya
相关产品推荐
相关产品推荐

