2015-11-06 53 views
1

我想從Scala內部編譯一個bash腳本。爲了緩解這個問題,我想使用字符串插值。然而,bash變量和Scala字符串插值似乎並不能很好地相互配合。下面是一個例子如何使用Scala字符串插值來參數化bash腳本?

val someFile="test.txt" 

val bashScript = s""" 
newFile=${someFile}.filtered 
grep foobar $someFile > $newFile 
""" 

這將導致編譯錯誤,因爲$ newFile不能被內插。但是,字面上保持$ newFile的原樣會給出預期的有效bash腳本。

可能的解決方案已經越過我的腦海裏,但我不知道他們是否可行,也不如何實現它們

  1. 泰爾階使用不同的前綴插值 表達,例如通過實現自定義內插器

  2. 以某種方式忽略不可插入的表達式並將它們保留爲 它們是。

+0

看一看菊-OPS然後你沒有在所有 http://lihaoyi.github.io/Ammonite/#Ammonite-Ops使用BASH – oluies

回答

1

您可以通過添加第二個美元符號來擺脫美元符號。所以以下應該工作。

val someFile="test.txt" 

val bashScript = s""" 
    newFile=${someFile}.filtered 
    grep foobar $someFile > $$newFile 
""" 
2

字符串插值轉義字符$,所以

val someFile="test.txt" 

val bashScript = s""" 
newFile=${someFile}.filtered 
grep foobar $someFile > $$newFile 
""" 

應該做你想要什麼。