如何将换行符传递给脚本中的命令?

如何将换行符传递给脚本中的命令?

我有一个 bash 脚本,它通过给定的分隔符连接其参数

#! /bin/bash   

d="$1";
shift;

echo -n "$1";
shift;
printf "%s" "${@/#/$d}";

这就是我的使用方式:

$ a=(one two 'three four' five)
$ myscript ' *** '  "${a[@]}" 
one *** two *** three four *** five

现在我想创建一个换行符作为分隔符,但这不会发生:

$ myscript '\n'  "${a[@]}" 
one\ntwo\nthree four\nfive

如何将换行符传递给脚本中的 printf 命令? (如果可能的话,我不打算重写我的脚本)。谢谢。

答案1

$'...'如果您希望\n将其扩展为换行符,请使用引号类型:

myscript $'\n'  "${a[@]}"

或者在单引号或双引号内逐字传递换行符:

myscript '
'  "${a[@]}"

答案2

这对我有用:

#! /bin/bash

d="$1";
shift;

echo -n "$1";
shift;
echo -e "${@/#/$d}";

输出:

$ ./1.sh ' *** '  "${a[@]}"
one *** two  *** three four  *** five

$ ./1.sh '\n'  "${a[@]}"
one
two
three four
five

相关内容