将文件内容附加到bash文件中循环中的String变量不起作用



我在运行时将一个文本文件传递给bash。文本文件中有我想提供给java程序作为参数的内容。文本文件的每一个内容都在一个新行中。内容在循环中打印得很好,但我需要创建一个包含所有内容的串联字符串,以传递给java程序,并且在循环中附加到字符串变量是不起作用的。这就是程序的样子:

#!/bin/bash
args=""
for var in $(cat payments.txt)
do 
echo "Line:$var"
args+="$var "
done
echo "$args"

它打印:

Line: str1
Line:str2
str2  // args should have appended values of each line but it got only last line

文件看起来像:

str1
str2

有人能指出我在这里做错了什么吗?

感谢

编辑:问题是由于rn行结尾引起的。

CCD_ 2是CCD_ 3无用使用的一个很好的例子。首选while循环:

#!/bin/bash
args=""
while IFS= read -r var; do
args+="$var "
done < payments.txt
echo "$args"

但是,您还可以使用bash数组:,而不是使用bash效率不高的循环

$ declare -a args=($(< payments.txt))
$ echo "${args[@]}"
str1 str2

"${args[@]}"扩展为单独的单词。使用"${args[*]}"展开为单个单词。如果你的行尾是rn(Windows(而不是n(最新的macOS、GNU/Linux(,那么r会干扰。打印前移除r

$ echo "${args[@]%$'r'}"

您的第一个回显是打印出组合,而不是将其存储在新变量中。尝试:

#!/bin/bash
args=""
for var in $(cat payments.txt)
do 
echo = "Line:$var" # this line prints but doesn't alter $var
args+="Line:$var2 " #add Line: in here
done
echo "$args"

最新更新