Linux循环中如何避免printf输出末尾多余的'x'字符
解决Shell循环脚本末尾多余'x'的问题
针对你遇到的循环输出末尾多一个x的问题,给你几个实用的解决思路:
方法1:先收集所有片段再拼接
先把每个(%s + %s)片段存到数组里,最后用x连接所有元素,从根源上避免多余后缀:
# 假设你的循环遍历的数值对存放在数组中 nums=(1 1 2 2 3 3) segments=() for ((i=0; i<${#nums[@]}; i+=2)); do a=${nums[$i]} b=${nums[$i+1]} segments+=("($a + $b)") done # 用指定分隔符拼接所有片段并输出 printf "%s\n" "$(IFS=' x '; echo "${segments[*]}")"
方法2:循环时判断是否为最后一次迭代
在循环内判断当前是否是最后一组数据,仅在非最后一次输出时添加x:
nums=(1 1 2 2 3 3) total=${#nums[@]} for ((i=0; i<total; i+=2)); do a=${nums[$i]} b=${nums[$i+1]} # 检查是否为最后一组 if (( i == total - 2 )); then printf "(%s + %s)" "$a" "$b" else printf "(%s + %s) x " "$a" "$b" fi done echo # 最后补充换行符
方法3:先输出所有内容再移除末尾的'x'
如果不想改动原有循环逻辑,可以先把输出暂存或直接通过管道处理,去掉最后多余的x:
# 方式1:存到变量后处理 output="" nums=(1 1 2 2 3 3) for ((i=0; i<${#nums[@]}; i+=2)); do a=${nums[$i]} b=${nums[$i+1]} output+="($a + $b) x " done # 移除末尾的" x "字符串 echo "${output% x }" # 方式2:直接用管道过滤 nums=(1 1 2 2 3 3) for ((i=0; i<${#nums[@]}; i+=2)); do printf "(%s + %s) x " "${nums[$i]}" "${nums[$i+1]}" done | sed 's/ x $//'
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

