将一些内容附加到保存命令输出的 bash 变量

将一些内容附加到保存命令输出的 bash 变量

这-

$a=`ls` | do something | etc. | etc. | etc...
echo "$a"

给出了这个-

file1
file2
file3

但我想在该变量的末尾附加一些内容,所以我尝试了

a=${a}\nfile4

但我明白了——

file1
file2
file3nfile4   # wrong!

答案1

在 Bash 中,您可以使用 附加到变量var+=value。但你的问题不是这个,而是生成换行符。最简单的方法是使用$'..'引号,它将反斜杠转义符解释\n为换行符:

a+=$'\nfile4'

答案2

如果您只想获取当前目录中的文件列表,然后将字符串附加到每个名称:

set -- *
printf '%s-somestring\n' "$@"

或者,使用bash数组,

names=( * )
printf '%s-somestring\n' "${names[@]}"

使用数组,位置参数数组(上面的第一个示例,适用于所有 POSIX shell)或数组bash,是处理文件名的最安全方法。如果您要将文件名转换为某种分隔字符串,那么当您的文件名包含您选择用来分隔字符串的任何字符时,您就会遇到问题。

只在输出的末尾附加一些内容,单独执行此操作echo

# code that output something
# then,
echo 'additional data'

或者,修改上面的示例:

set -- * 'additional data'
printf '%s\n' "$@"

names=( * 'additional data' )
printf '%s\n' "${names[@]}"

或者...

set -- *
set -- "$@" 'additional data'
printf '%s\n' "$@"

names=( * )
names+=( 'additional data' )
printf '%s\n' "${names[@]}"

答案3

你可以尝试使用 echo 吗:

a=$(echo -e "${a}\nfile")

相关内容