shell 在bash中的while循环中连接字符串

jv2fixgn  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(175)

我正在尝试用bash写一个程序,它将一个文件名作为输入参数,然后将该文件的每一行都附加到一个字符串中。最后,我想打印这个字符串。这是我写的(考虑到程序名是concat.sh):

#!/bin/bash

FILE=$1
STR=""

cat $FILE | while read USER; do
        STR="${STR}${USER}"
done

echo "$STR"

我有一个文件stuff.txt,它有以下内容:

a
b
c

在我运行./concat.sh stuff.txt之后,我得到了空字符串。我尝试了这种连接的多种变体,有空格,没有空格(如上所述),有换行符,等等。还是不行如果我试着简单地打印每一行,它就能工作。因此,如果我简单地在循环中添加echo "$USER"行,我会得到正确的输出,即abc(每个都在不同的行上)。但是字符串连接仍然不起作用。即使我在连接中停止使用$USER变量,它也不起作用。所以如果我做类似STR="${STR} abc"的事情,字符abc令人惊讶地没有连接到STR。但是如果我把它放在while循环之外,它实际上是工作的(所以如果我注解while循环并简单地执行STR="${STR} abc",我将在字符串STR中得到abc)。我是bash的新手,这对我来说看起来真的很奇怪,不知道发生了什么/如何修复它。

5f0d552i

5f0d552i1#

不要使用cat- ie。不要使用管道。不要使用USER

while read var; do
        str="${str}${var}"
done < "$file"

不要在脚本中使用大写变量。USER是bash设置的当前用户名变量。
使用http://shellcheck.net检查脚本
读取https://mywiki.wooledge.org/BashFAQ/024
读取https://mywiki.wooledge.org/BashFAQ/001
Do not uselessly use cat
在bash中,你也可以使用str+="$var"
引用变量扩展。

相关问题