Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash:单引号、双引号和感叹号_Linux_Bash_Shell_Command Line - Fatal编程技术网

Linux Bash:单引号、双引号和感叹号

Linux Bash:单引号、双引号和感叹号,linux,bash,shell,command-line,Linux,Bash,Shell,Command Line,我有一个名为示例的简单脚本: #!/bin/sh echo $'${1}' 请注意,$”在这里的用法是将\n转换为新行。 ${1}是传递到此shell脚本的第一个参数 我想将一个参数传递给此脚本示例,它将打印以下内容: #1. You're smart! #2. It's a difficult question! example "#1. You're smart!\n#2. It's a difficult question!" 我尝试了以下方法: #1. You're smart!

我有一个名为
示例
的简单脚本:

#!/bin/sh
echo $'${1}'
请注意,
$”
在这里的用法是将
\n
转换为新行。
${1}
是传递到此shell脚本的第一个参数

我想将一个参数传递给此脚本
示例
,它将打印以下内容:

#1. You're smart!
#2. It's a difficult question!
example "#1. You're smart!\n#2. It's a difficult question!"
我尝试了以下方法:

#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:未找到事件

然后我试着逃离
按单引号,并尝试:

example '#1. You're smart\!\n#2. It's a difficult question\!'
它输出:

${1}
这里有什么解决办法吗?非常感谢

表达式中的内容必须是文本。不能在其中展开其他变量

但你可以这样做:

echo "${1//\\n/$'\n'}"
Jan Hudec有一个更好的答案:

echo -e "$1"
或者
echo-e$1
,或者
echo-e${1}
,如果您只想处理第一个参数

让bash停止尝试扩展
,使用
设置+H
(请参阅)


Echo知道如何解释转义序列本身!它在不同的shell中以不同的方式完成,但只要只请求bash,
echo-e“$1”
就可以了。我知道单引号不会扩展变量。但我需要换行
$''
似乎是唯一的解决方案。@Jan:是的,没错。我也会加上你的答案。:-)@DocWiki:我已经编辑了我的答案以使用
$'
,但方式与您使用的方式不同。非常感谢!但是我的脚本不能在你的脚本中工作:脚本是
echo-e${1}
,使用
示例“#1.你很聪明!\n#2.这是一个很难的问题!”
它打印
\1。你真聪明#2.这是一个难题请注意
\但是我想要
。我已编辑我的评论。这条新线行得通,但我想要“!”当它打印“\!”时。然后还有其他错误,使用
${1}
(或纯
$1
)不会对输出进行任何更改。试着开始一个新的shell,也许你已经破坏了你的环境。重要的一点是关于
set+H
命令(或
set+o histexpand
)。(我正在使用Bash4.1.9,但这不会改变任何事情。)上面有一个链接问题,请阅读。是的,这是每节课。使用
manbash
并搜索
histexpand
查看其工作原理和其他选项。Mat提供了完美的解决方案!感谢克里斯·杰斯特·杨和简·胡德克。你们都是专家!