这-
$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")