我想从Scala中编译一个bash脚本。为了简化这一点,我想使用字符串插值。但是,bash变量和Scala字符串插值似乎并不能很好地相互配合。这是一个例子
val someFile="test.txt"
val bashScript = s"""
newFile=${someFile}.filtered
grep foobar $someFile > $newFile
"""
这将导致编译错误,因为无法插入$ newFile。但是,按字面意思保留$ newFile会产生预期的有效bash脚本。
我想到了可能的解决方案,但我不知道它们是否可行,也不知道如何实施它们
告诉scala为插值使用不同的前缀 表达,例如通过实施自定义插补器
以某种方式忽略非插值表达式并将其保留为 他们是。
答案 0 :(得分:2)
字符串插值的转义字符是$
,所以
val someFile="test.txt"
val bashScript = s"""
newFile=${someFile}.filtered
grep foobar $someFile > $$newFile
"""
应该做你想做的事。
答案 1 :(得分:1)
您可以通过添加第二个美元符号来逃避美元符号。所以以下内容应该有效。
val someFile="test.txt"
val bashScript = s"""
newFile=${someFile}.filtered
grep foobar $someFile > $$newFile
"""