回显一些字符串
➜ ~ echo 'LOGIN_IDENTITY=sdf!121sdf$78sd!8'
LOGIN_IDENTITY=sdf!121sdf$78sd!8
但是当使用双引号时,它无法成功打印并更改为另一个奇怪的命令
➜ ~ echo "LOGIN_IDENTITY=sdf!121sdf$78sd!8"
➜ ~ echo "LOGIN_IDENTITY=sdffind . -name 'application.properties' | xargs grep 'login'sdf$78sdawk '{print "\""$0"\""}' a"
双引号出了什么问题?
答案 0 :(得分:1)
由于shell中的Parameter Expansion
,当双引号中有!
个字符时,它会尝试将其展开为有值。
摘录自man bash
页面,history-expansion
小节:
历史扩张是由历史扩张的出现引入的 字符,默认为'!'。只有'\'和'''可用于转义>历史扩张性,但历史扩张性也是 如果它紧接在a的结束双引号之前,则作为引用处理 双引号字符串。
您可以使用单引号('
)
$ echo "LOGIN_IDENTITY=sdf!121sdf$78sd!8"
-bash: !121: event not found
将上述作业更改为
$ echo "LOGIN_IDENTITY=sdf"'!'"121sdf$78sd"'!'"8"
LOGIN_IDENTITY=sdf!121sdf8sd!8
请注意!
字符周围的单引号。