我在运行时将一个文本文件传递给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"