【问题标题】:bash command line append to variable will prepend insteadbash 命令行追加到变量将改为前置
【发布时间】:2013-02-12 10:24:42
【问题描述】:

在 shell 脚本中,我通常将字符串附加到带有“${variable} end”的变量中。但是,我有一个文件“file.txt”,我希望在其中的所有行都附加“end”。所以我使用命令行,例如for i in `cat file.txt`; do echo "${i} end"; done。但是“结束”这个词(加上空格)不会被附加而是附加。当我使用 while 循环时,也会发生同样的事情。谁能告诉我那里发生了什么?我在 LinuxMint13 64 位(Cinammon 和 Mate)上使用 GNU bash 版本 4.2.37。

感谢您的帮助!

【问题讨论】:

  • "[...] 不会被追加,而是追加。"这是什么意思?

标签: bash variables loops for-loop append


【解决方案1】:

使用循环是唯一的选择吗?如果您只想在每行末尾附加一些内容,那么使用sed 可能更容易:

sed -ie 's/.*/& end/' file.txt

【讨论】:

    【解决方案2】:

    您应该使用 while 循环而不是 for 循环,as explained here。

    while IFS= read -r line
    do
        echo "$line end"
    done < "file.txt"
    

    【讨论】:

    • 您好,抱歉,我忘记添加了,我也尝试过使用 while 循环!
    • 我可以提供截图。我对此很困惑
    • @WayneJhukie 请注意,$line 周围没有括号。否则,我不知道为什么它不起作用。
    【解决方案3】:

    这可能只是你的语法 - 不要忘记do。那就是:

    for i in `cat file.txt`; do echo "${i} end"; done
    

    如果您询问如何创建一个新文件,并在每一行附加“end”,试试这个:

    for i in `cat file.txt`; do echo "${i} end" >> some_new_file; done
    

    【讨论】:

    • 不要使用for in in cat file,而是使用while read do ... done &lt; file.txt
    • 嗨,马特,对不起,我没有忘记做(只是我的帖子有误):/
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2015-06-22
    相关资源
    最近更新 更多