You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下如何将od命令输出的每一位数字赋值给对应变量

od命令输出逐位赋值到独立变量的实现方法

适用场景

执行od -b text类命令后,会得到类似02467324 14731245 37263153的空格分隔输出,以下方法可以把输出中的每一位数字单独赋值给自定义变量,实现A=0、B=2、C=4、D=6的效果。


Bash环境实现方案(最常用)

  1. 先预处理od输出,过滤掉空格、换行等非数字字符,存入临时变量:
od_output=$(od -b text | tr -d ' \n')

如果不需要od输出开头的地址段,只保留数据列,可以调整预处理逻辑为:od_output=$(od -b text | awk '{$1="";print $0}' | tr -d ' \n')

  1. 手动逐位赋值(适配自定义变量名)
    Bash支持${变量:偏移量:长度}的子串提取语法,偏移量从0开始计数,长度取1即可提取单个数字:
A=${od_output:0:1}
B=${od_output:1:1}
C=${od_output:2:1}
D=${od_output:3:1}
# 后续位按上述规则顺延即可
  1. 批量自动赋值(适配按顺序命名的变量)
    如果需要把大量位数按顺序赋值给A-Z、var1到varN这类规则命名的变量,可以用循环实现:
# 示例:将前26位依次赋值给A到Z
for ((i=0; i<${#od_output} && i<26; i++)); do
    var_name=$(printf "\\$(printf '%03o' $((65+i)))")
    declare "$var_name=${od_output:i:1}"
done

POSIX兼容Shell实现方案(适配sh、dash等轻量Shell)

如果运行环境不支持Bash的子串提取语法,可以用cut命令逐位截取:

# 预处理逻辑不变
od_output=$(od -b text | tr -d ' \n')
# 逐位赋值,cut的-c参数后接位数,从1开始计数
A=$(printf '%s' "$od_output" | cut -c 1)
B=$(printf '%s' "$od_output" | cut -c 2)
C=$(printf '%s' "$od_output" | cut -c 3)
D=$(printf '%s' "$od_output" | cut -c 4)

效果验证

赋值完成后执行echo $A $B $C $D,即可得到输出0 2 4 6,符合要求。

内容的提问来源于stack exchange,提问作者Thatcher Watkins-Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:39:01