Bash中echo捕获变量丢失换行如何解决?保留换行方法求助
解决Bash中变量输出丢失换行的问题
问题根源
在Bash中,直接使用echo $var这类不加双引号的写法时,会触发分词扩展机制:变量中的换行符、制表符等空白字符会被统一替换成空格,导致原始格式丢失。这就是你示例中输出变成a b c的原因。
简化示例的修正方案
只需给变量加上双引号,同时移除不必要的嵌套$(echo ...),就能保留原始换行:
echo "a\nb\nc" | { var=$(cat); echo "$var"; }
执行后输出和原输入一致:
a b c
原私钥脚本的修正
针对你的私钥处理脚本,需要两处调整:
- 内层
echo $var改为echo "$var",保留私钥的换行格式,确保openssl rsa -pubout能正确识别输入; - 外层
echo的\n在Bash中默认不解析转义,建议用printf替代以保证跨环境兼容性(或给echo加-e参数)。
修正后的脚本:
echo "pkcs12 here" |\ openssl rsa |\ { var=$(cat); printf "%s\n%s" "$var" "$(echo "$var" | openssl rsa -pubout)"; }
或者用echo -e(部分系统环境兼容):
echo "pkcs12 here" |\ openssl rsa |\ { var=$(cat); echo -e "$var\n$(echo "$var" | openssl rsa -pubout)"; }
内容的提问来源于stack exchange,提问作者eeqk
相关产品推荐
相关产品推荐

