【问题标题】:Pass content of file in variable into bash script - without writing the file down将变量中的文件内容传递到 bash 脚本中 - 无需写下文件
【发布时间】:2013-06-22 14:12:26
【问题描述】:

我有一个类似的 bash 脚本

./script -a filename

我在变量 $CONTENT 中有一个文件的内容

如何将变量传递给命令。我的意思是我可以先将变量的内容写入磁盘,但这似乎开销太大。

有没有更好的解决方案?

类似

./scrip -a << $CONTENT

【问题讨论】:

    标签: linux bash shell unix command-line


    【解决方案1】:

    你还需要一个&lt;:

    ./script -a <<<"$CONTENT"
    

    &lt;&lt;&lt;被称为herestring,它接受下面的字符串并将其作为标准输入传递。

    【讨论】:

    • 你应该使用引号:./script -a &lt;&lt;&lt; "$CONTENT"
    • 你一定是在开玩笑,而且不好笑!试试:s="a b"(比如说,a 和 b 之间有三个空格,这里显示不正确),然后比较 cat &lt;&lt;&lt; $scat &lt;&lt;&lt; "$s"。另外,请参阅手册的Here String 部分。您将阅读:单词被扩展并提供给标准输入上的命令。是的,已扩展。作为一般规则:使用更多引用!
    • 我明白了,空间被折叠了。但它并没有扩展到其他参数,这是我测试过的。
    • 未引用变量的扩展可能会产生副作用,例如,如果您设置有趣的IFS 等,那么最好总是引用!
    • 我试图将它与xsltproc &lt;&lt;&lt; "$xslt_content" "$xml_path"file &lt;&lt;&lt; "$content" 一起使用。这些都没有奏效。它必须是最后一个参数吗? file 调用有什么问题?
    【解决方案2】:

    只要您按照 cmets 中的建议将该变量引用到该答案,Kevin 建议使用 here 字符串即可。更便携的解决方案是使用此处的文档:

    ./script -a << EOF
    $CONTENT
    EOF
    

    在这种情况下,引号是不必要的,实际上是不可取的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多