我在使用从cron调用的Perl脚本时遇到了一些困难。
该脚本的一个参数是GPG密码。稍后将其插入到发送到shell的字符串中。
此特定密码包含一个打开的括号,并且脚本失败并出现“意外令牌附近的语法错误”(“错误。
这是短语中令人讨厌的部分:
m3(ÃÝ4úŤ;:q!
在脚本中使用该值之前,我尝试过单引号和双引号,但这没有效果。
当直接从shell调用GPG时,该短语可以正常工作,而不是当它被插入到以下内容中时:
`gpg --passphrase $gpgpp --batch -o $gpgofile -d $file`;
其中$ gpgpp是密码短语变量。
逃避这个以及其他可能存在问题的角色的正确方法是什么?
答案 0 :(得分:3)
\Q
和\E
转义序列用于逃避所有"特殊"他们之间的人物。
`gpg --passphrase \Q$gpgpp\E --batch -o $gpgofile -d $file`;
只要您的变量可能包含需要转义的字符,就应该这样做。
答案 1 :(得分:1)
将变量括在引号中:
Resave "myfile.xlsm"
Sub Resave(filename)
Set objExcel = CreateObject("Excel.Application")
currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))
objExcel.Application.AutomationSecurity = 3 ' Disable to avoid crash
objExcel.Application.enableevents = False
objExcel.Application.Workbooks.open(currentDirectory + "\" + filename)
objExcel.Application.Visible = True
objExcel.Application.DisplayAlerts = False
Set objSheet = objExcel.ActiveWorkbook.Sheets.Add
objSheet.Delete
objExcel.Application.DisplayAlerts = True
objExcel.Application.enableevents = True
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
Set objExcel = Nothing
End Sub
否则,shell将尝试将变量的内容解释为表达式。