gpt4 book ai didi

bash - 使用换行符在 Bash 中构建字符串

转载 作者:行者123 更新时间:2023-11-29 09:20:33 29 4
gpt4 key购买 nike

我正在 Bash 中查看一个脚本,根据条件,我想将不同的内容附加到变量,然后在最后显示它。像这样:

VAR="The "

if [[ whatever ]]; then
VAR="$VAR cat wears a mask"
elif [[ whatevs ]]; then
VAR="$VAR rat has a flask"
fi

但是如果我尝试使用这种形式通过附加到它来构建 VAR 时,我会遇到困难,因为我想偶尔将换行符附加到其中。例如,VAR="$VAR\nin a box" 我该怎么做?

我以前见过 $'\n' 的用法,但由于附加而尝试使用 $VAR 时却看不到。

最佳答案

使用 ANSI C quoting :

var="$var"$'\n'"in a box"

您可以将 $'\n' 放入变量中:

newline=$'\n'
var="$var${newline}in a box"

顺便说一句,在这种情况下,最好使用连接运算符:

var+="${newline}in a box"

如果你不喜欢 ANSI C 引用,你可以使用 printf 及其 -v 选项:

printf -v var '%s\n%s' "$var" "in a box"

然后,要打印变量 var 的内容,不要忘记引号!

echo "$var"

或者,更好的是,

printf '%s\n' "$var"

备注。不要在 Bash 中使用大写变量名。这太可怕了,总有一天它会与一个已经存在的变量发生冲突!


您还可以创建一个函数,使用间接扩展将换行符和字符串附加到变量(查看 Shell Parameter Expansion section of the manual ),如下所示:

append_with_newline() { printf -v "$1" '%s\n%s' "${!1}" "$2"; }

然后:

$ var="The "
$ var+="cat wears a mask"
$ append_with_newline var "in a box"
$ printf '%s\n' "$var"
The cat wears a mask
in a box
$ # There's no cheating. Look at the content of 'var':
$ declare -p var
declare -- var="The cat wears a mask
in a box"

只是为了好玩,下面是 append_with_newline 函数的通用版本,它接受 n+1 个参数(n≥1),并且它将使用换行符作为分隔符将它们全部连接起来(第一个除外,第一个是将展开的变量的名称),并将答案放入变量中,变量的名称在第一个参数中给出:

concatenate_with_newlines() { local IFS=$'\n'; printf -v "$1" '%s\n%s' "${!1}" "${*:2}"; }

看看它的效果如何:

$ var="hello"
$ concatenate_with_newlines var "a gorilla" "a banana" "and foobar"
$ printf '%s\n' "$var"
hello
a gorilla
a banana
and foobar
$ # :)

IFS"$*" 是一个有趣的骗局。

关于bash - 使用换行符在 Bash 中构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912681/

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