我有一个名为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}
这里有解决方案吗?非常感谢!
答案 0 :(得分:3)
$ cat t.sh
#! /bin/bash
echo -e $@
或echo -e $1
或echo -e ${1}
,如果您只想处理第一个参数。
要让bash停止尝试展开!
,请使用set +H
(请参阅In bash, how do I escape an exclamation mark?)
$ 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!
答案 1 :(得分:2)
$''
表达式中的内容必须是文字。你不能在其中扩展其他变量。
但你可以这样做:
echo "${1//\\n/$'\n'}"
Jan Hudec有一个更好的答案:
echo -e "$1"