Shell脚本循环中实现变量输出单行打印的问题
解决方法:将循环输出合并到同一行
原来的echo命令默认会在输出末尾添加换行符,所以每次循环都会单独占一行。要把所有输出放在同一行,有几种简单的修改方式:
方法1:使用echo -n抑制换行
修改循环里的echo命令,加上-n参数(bash/zsh等主流shell都支持),这样就不会自动添加换行:
IFS=: for item in $mystring do echo -n "expdp query $item " done # 最后手动加一个换行,让输出更整洁 echo
方法2:用printf实现更可靠的格式控制
printf比echo的跨shell兼容性更好,你可以直接指定输出格式,默认不添加换行:
IFS=: for item in $mystring do printf "expdp query %s " "$item" done # 最后补一个换行 printf "\n"
方法3:先拼接成变量再一次性输出
如果需要后续复用这个结果,也可以先把所有内容拼接到一个变量里,最后统一打印:
IFS=: output="" for item in $mystring do output="$output expdp query $item" done # 去掉开头多余的空格后输出 echo "${output# }"
小提示:你的原始字符串末尾有个冒号,循环最后会处理一个空的item,导致输出expdp query (后面为空)。如果要避免这种情况,可以先处理字符串去掉末尾的冒号:mystring="${mystring%:}",再执行循环。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

