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提供了完美的解决方案!感谢克里斯·杰斯特·杨和简·胡德克。你们都是专家!