如何使用Scala字符串插值来参数化bash脚本?

如何使用Scala字符串插值来参数化bash脚本?,bash,scala,Bash,Scala,我想从Scala内部编译一个bash脚本。为了简化这一点,我想使用字符串插值。然而,bash变量和Scala字符串插值似乎不能很好地相互配合。这里有一个例子 val someFile="test.txt" val bashScript = s""" newFile=${someFile}.filtered grep foobar $someFile > $newFile """ 这将导致编译错误,因为$newFile无法插值。然而,保持$newFile的原样会得到预期的有效bash脚本

我想从Scala内部编译一个bash脚本。为了简化这一点,我想使用字符串插值。然而,bash变量和Scala字符串插值似乎不能很好地相互配合。这里有一个例子

val someFile="test.txt"

val bashScript = s"""
newFile=${someFile}.filtered
grep foobar $someFile > $newFile
"""
这将导致编译错误,因为$newFile无法插值。然而,保持$newFile的原样会得到预期的有效bash脚本

我想到了可能的解决方案,但我不知道它们是否可行,也不知道如何实施

  • 告诉scala为插值的对象使用不同的前缀 表达式,例如通过实现自定义插值器

  • 以某种方式忽略不可插值的表达式,并将其保持为 是的


  • 字符串插值的转义字符是
    $
    ,因此

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

    应该做你想做的。

    字符串插值的转义字符是
    $
    ,所以

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

    应该做你想做的。

    你可以通过添加第二个美元符号来避开美元符号。因此,以下方法应该有效

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

    您可以通过添加第二个美元符号来避开美元符号。因此,以下方法应该有效

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

    看一看亚扪人的行动然后你根本不必使用BASH看一看亚扪人的行动然后你根本不必使用BASH