Bash:单引号,双引号和感叹号

时间:2011-05-16 11:25:33

标签: linux bash shell command-line

我有一个名为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}

这里有解决方案吗?非常感谢!

2 个答案:

答案 0 :(得分:3)

$ cat t.sh
#! /bin/bash
echo -e $@

echo -e $1echo -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"