繁体   English   中英

如何在字符串中扩展bash变量并保留换行符

[英]How to expand bash variable in a string and preserve newline

这适用于单行字符串:

var2="2018"
str="${var1:-hello} world! 
Happy $var2 new year $var2"

newstr=()
for cnt in "$str" ;do
    echo "$cnt"
    [ "${cnt:0:1}" == '$' ] && cnt=${cnt:1} && cnt=${!cnt}
    newstr+=($cnt)
done
newstr="${newstr[*]}"

如何保留换行符?

即使我无法完全理解您的目标,
正确引用将保留新行。

更改这两行:

[ "${cnt:0:1}" == '$' ] && cnt="${cnt:1}" && cnt="${!cnt}"
newstr+=("$cnt")

脚本的目的对我来说是晦涩的,但是这是我逐行读取脚本的方式:

var2="2018"
str="${var1:-hello} world! 
Happy $var2 new year $var2"

newstr=()
while read cnt; do
    echo "$cnt"
    [ "${cnt:0:1}" == '$' ] && cnt=${cnt:1} && cnt=${!cnt}
    newstr+=($cnt)
done < <(echo "$str")
newstr="${newstr[*]}"

read命令读取另一行。 编写它的自然方法是使用管道:

var2="2018"
str="${var1:-hello} world! 
Happy $var2 new year $var2"

newstr=()
echo "$str" | while read cnt; do
    echo "$cnt"
    [ "${cnt:0:1}" == '$' ] && cnt=${cnt:1} && cnt=${!cnt}
    newstr+=($cnt)
done
newstr="${newstr[*]}"

但是,管道会创建一个子外壳,一旦退出循环,在while循环内修改的变量将被丢弃,此处特别是newstr变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM