gpt4 book ai didi

bash - 带有尾随换行符的 POSIX/Bash pad 变量

转载 作者:行者123 更新时间:2023-12-02 02:25:53 25 4
gpt4 key购买 nike

我有一个变量,其中包含一些行,我想用另一个变量中定义的多个换行符填充它。然而,子 shell 似乎可能会删除尾随的换行符。我不能只将 '\n' 与 echo -e 一起使用,因为这些行可能已经包含需要按原样打印的转义字符。

我发现我可以使用它打印任意数量的换行符。

n=5
yes '' | sed -n "1,${n}p;${n}q"

但是,如果我在子 shell 中运行它以将其存储在变量中,则子 shell 似乎会删除尾随换行符。

我可以近似其功能,但它很笨拙,并且由于我使用它的方式,我宁愿能够仅调用 echo "$var" 甚至使用 $var 本身用于字符串连接之类的事情。一旦变量的最后(填充)行被删除,这种近似就会在子 shell 中遇到同样的问题。

这是我的近似值

n=5
var="test"
#I could also just set n=6
cmd="1,$((n+1))p;$((n+1))q"
var="$var$(yes '' | sed -n $cmd; echo .)"

#Now I can use it with
echo "$var" | head -n -1

本质上,我需要一种向变量附加多个换行符的好方法,然后可以使用 echo 打印该变量。

如果可能的话,我希望保持此 POSIX 兼容,但在现阶段,bash 解决方案也是可以接受的。我还将其用作工具的一部分,为此我设置了一个挑战,即在保持可读性的同时最大限度地减少行数和字符数。但一旦我有了可行的解决方案,我就可以解决这个问题

最佳答案

$( ) 或反引号替换命令将修剪尾随换行符。所以不要使用它们;使用 shell 的内置字符串操作:

n=5
var="test"
while [ "$n" -gt 0 ]; do
var="$var
"
n=$((n-1))
done

请注意,下一行的 var="$var 之后(换行符之前)不能有任何内容,并且 " 之前不能有任何内容(无缩进!) .

关于bash - 带有尾随换行符的 POSIX/Bash pad 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65651360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com