2013-08-30 21 views
3

我有一個bash腳本我正在生成一些數字,將它們分配給變量,然後使用osascript將它們寫入任何應用程序中。在shell腳本中麻煩轉義引號

這是我想要做的簡化版本。

monday1=5 
osascript -e 'tell application "System Events" to keystroke "$monday1"'; \ 

的osascript應該是這樣的

osascript -e 'tell application "System Events" to keystroke "5"'; \ 

這就將鍵入出過什麼應用程序,我有我的光標數5。問題是,它輸出$ monday1代替。我知道我必須做些什麼來避免引號,所以腳本可以輸入變量,但我不知道如何。

想法?

+0

你可以使用反斜槓(\\)逃避$符號,看看是否有幫助嗎? –

+1

@ArunR:使用反斜槓'\''轉義'$'不起作用,因爲單引號字符串中沒有轉義字符。 –

回答

5

的問題是,單引號裏面,有沒有特殊的元字符,所以$monday1傳遞給osascript不變。所以,你必須確保$monday1不在單引號內。

選項包括:

monday1=5 
osascript -e 'tell application "System Events" to keystroke "'$monday1'"' 

monday1=5 
osascript -e 'tell application "System Events" to keystroke "'"$monday1"'"' 

monday1=5 
osascript -e "tell application \"System Events\" to keystroke \"$monday1\"" 

monday1=5 
osascript -e "tell application 'System Events' to keystroke '$monday1'" 

首先停止單引號只是雙引號包圍擊鍵後,嵌入的$monday值,並恢復單報價爲剩餘的雙引號。這是可行的,因爲$monday1中沒有空格等。

第二個與第一個類似,但在雙引號中圍繞着"$monday1",所以即使$monday1包含空格,它也可以工作。

第三個用雙引號括起整個參數,並且轉義每個嵌入的雙引號。如果你對反斜槓不敏感,這很好。

第四個可能會也可能不會工作 - 這取決於osascript程序是否對圍繞其參數的引號類型敏感。它只是顛倒了雙引號和單引號的使用。 (這工作只要外殼而言Gordon Davissoncommentosascript需要雙引號,並且不接受單引號觀察到的,所以它不會因爲被調用的程序規則的工作 - 。osascript

在第三種情況和第四種情況下,如果需要保護字符串的其他部分以便shell不擴展信息,則需要小心。一般來說,單引號更好,所以我會使用前兩個選項之一。

+0

第一個完美的作品。這正是我需要的。感謝有關問題的幫助和詳細解釋。 – WithAnEs

0

將整個字符串包裹在單引號中可防止插入變量monday1。切換雙引號和單引號:

osascript -e "tell application 'System Events' to keystroke '$monday1'"; 
+2

Applescript不能將單引號識別爲字符串分隔符,因此雖然這在shell級別工作,但您會收到AppleScript語法錯誤。 –

+0

@GordonDavisson啊我沒有意識到,謝謝。 – ThisSuitIsBlackNot

1

單引號組成一個沒有變量替換的作用域。

osascript -e "tell application \"System Events\" to keystroke \"$monday1\""; \