在执行脚本时,我遇到了以下问题:将命令的多行结果放入变量时,看起来多行字符串的最后一行(空行)消失。因为我将保存在数据库中的代码块和包含“\ n”字符的代码块连接在一个可读的字符串中,因此我不能丢失它包含的回车符。如果我失去了一些“\ N”的,我会失去我的代码缩进的一部分),为什么我的多行字符串的最后一行(空行)在将其保存在变量中时会消失?
这里是代码来说明我的问题:
test="A
B
";
test2=`echo "$test"`;
echo "||$test2||";
这将返回
||A
B||
w ^往往微不足道我期待:
||A
B
||
- >最后一个(空)线已经消失......并回车在我的人类可读的代码从而错过。只有当我的多线串的最后一行是空的发生
这个问题......
你知道
- 为什么最后一行消失?
- 我如何确保我最后的空行保存在我的多行字符串变量中?
注意,我当然不能用最简单的解决
test2="$test";
因为整个过程相当:
test="^A\n\nB\n^"
test2="`echo "$test" | sed -e 's/\^//g'`";
,但我试图简化问题,最让我可以。
命令替换总是修剪后的新行 - - 这符合设计和规范。否则,'foo = $(echo foo)'不会包含字符串'foo',但会有一个尾随的换行符 - 这会混淆人们。 –
顺便说一句,哪个特定版本的ksh是这个?有很多不同的,不兼容的实现浮动。 –
@CharlesDuffy无法找到我正在使用的ksh版本的命令...我试过“ksh --version”,“echo $ {。sh.version}”&“echo $ KSH_VERSION”。如果你知道识别我的ksh版本的其他可能性,我非常感兴趣;-) – Seba991