【问题标题】:Bash - File contentBash - 文件内容
【发布时间】:2015-01-07 03:28:45
【问题描述】:

我正在尝试将多个文件的内容存储到变量中,但找不到正确的方法。示例如下 - 我需要以某种方式重写最后一行,因为 $content 不是文件。

content="";
if (($# > 0)); then #input files given as arguments 
    for i ; do
    if [ -r "${i}" ]; then
cat "${i}" >> "$content" #I need to append contents to existing variable 

【问题讨论】:

  • 你为什么不cat变量内容中的所有文件? content=$(cat "$@" 2>/dev/null)。或者如果content 不是空的,content+=$(cat "$@" 2>/dev/null)。最后一个提示您解决您正在解决的特定问题:content+=$(cat "$i")
  • 问题已解决,谢谢!
  • 不要谢谢,请考虑支持并接受对您有帮助的答案;)

标签: bash file variables syntax


【解决方案1】:

不需要循环; cat 的目的是连接多个文件。

content=$(cat "$@")

如果出于某种原因确实需要循环,则条件是多余的;零元素上的循环将执行零次。

content=$(for i; do
    test -r "$i" && cat "$i"
done)

在 Bash 中,您可以使用 += 附加到变量;更便携,你可以做var="${var}newvalue"

【讨论】:

  • 我忘了说,所有的输入文件都必须是可读的。
  • 如果不是,则会出现错误消息。如果你想抑制它,你可以重定向标准错误。
  • @ondrousn:如果文件不可读(或不存在,或者是目录),cat 将在我写的评论中抱怨 stdout(这就是我添加 2>/dev/null 的原因)到 OP。
猜你喜欢
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 2010-12-04
  • 2016-11-11
  • 2011-10-20
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多