我有一个简单的脚本命名example
:
#!/bin/sh echo $'${1}'
请注意这里使用$''
是将\n
换成新行。 ${1}
是传递给此shell脚本的第一个参数。
我想传递一个参数给这个脚本的example
,它打印以下内容:
#1. You're smart! #2. It's a difficult question!
我尝试了以下内容:
example "#1. You're smart!\n#2. It's a difficult question!"
错误: -bash: !\n#2.: event not found
然后我试图逃跑!
通过单引号,并尝试:
example '#1. You're smart\!\n#2. It's a difficult question\!'
它输出:
${1}
任何解决scheme? 非常感谢!
$ cat t.sh #! /bin/bash echo -e $@
或者echo -e $1
,或者echo -e ${1}
如果你只是想处理第一个参数。
为了让bash停止尝试扩大!
,请使用set +H
(请参阅在bash中,如何转义感叹号? )
$ set +H $ ./t.sh "#1. You're smart!\n#2. It's a difficult question!" #1. You're smart! #2. It's a difficult question!
$''
表达式中的内容必须是文字。 你不能在其中扩展其他变量。
但是你可以这样做:
echo "${1//\\n/$'\n'}"
Jan Hudec有一个更好的答案:
echo -e "$1"