正则操作结果存入变量后重复出现的技术问题求助
问题分析与解决
你的脚本有两个核心问题:
- 循环赋值逻辑错误:每次循环都把
secret和value赋值成同一个$name,导致两个变量内容完全重复; tr命令用法错误:tr不支持正则表达式的*,你写的tr "[[:space:]]*" "\n"会把[、]、:等字符也转换成换行,根本达不到合并多空格为换行的效果。
下面是几种简单有效的修复方案:
方案1:用bash内置字符串截取(最简洁)
直接通过字符串操作提取第一个和第二个字段,自动忽略中间的多空格:
Input="secretname value" secret=${Input%% *} # 从右往左截取到第一个空格,取左侧内容 value=${Input#* } # 从左往右截取到第一个空格,取右侧内容 echo $secret echo $value
方案2:用read命令自动分割
read命令默认会把任意数量的空白字符(空格、制表符等)当成分隔符,直接把内容分配给两个变量:
Input="secretname value" read secret value <<< "$Input" echo $secret echo $value
方案3:用数组存储分割结果(适合多字段场景)
如果后续需要处理更多字段,可以把分割后的内容存到bash数组里,再按需取值:
Input="secretname value" names=($Input) # bash自动按空白分割字符串为数组 secret=${names[0]} value=${names[1]} echo $secret echo $value
内容的提问来源于stack exchange,提问作者Gapi
相关产品推荐
相关产品推荐

