Pep*_*lák 6 shell bash string quoting
假设我有一个回显的脚本 $1
#!/bin/bash
echo $1
Run Code Online (Sandbox Code Playgroud)
它被称为test.sh。然后我打电话/bin/test.sh 'test'。输出是test。但这不起作用:
/bin/test.sh 'te'st'
Run Code Online (Sandbox Code Playgroud)
有语法错误。
这两个单引号之间可以有任何内容,例如
/bin/test.sh 'te"s"t'` or `/bin/test.sh 'te's't'` or `/bin/test.sh 'te"s't'
Run Code Online (Sandbox Code Playgroud)
有没有办法处理这个问题?我只能使用封闭引号。我无法改变变量内部的内容;这是一个日志解析。任何东西都可以在日志条目中。
我需要 bash 正确地接受这些论点。
例子:
/bin/test.sh '2015.11.11 07:45:44.060|executor-2|||ERROR|236 - PDF document for 5616904 wasn't created!'
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为'单词中的单曲不在字符串内。
字符串完全按照我写的那样放置。我将它与 Zabbix(监控解决方案)一起使用。所以在zabbix中是这样的:
/bin/test.sh '{$TRIGGER.VALUE}'
Run Code Online (Sandbox Code Playgroud)
但最终{$TRIGGER.VALUE}被替换为实际的字符串,并使用文字值调用脚本。
要将单引号放入命令行,请使用双引号或反斜杠:
test.sh "'test'"
test.sh \'test\'
Run Code Online (Sandbox Code Playgroud)
但从你的帖子来看,你真正的问题似乎有所不同:
我无法更改变量内部的内容
如果变量中已经有一个字符串,只需双引号该变量即可传递其值不变。
test.sh "$var"
Run Code Online (Sandbox Code Playgroud)