为啥循环生成的 Bash 数组值连接在一起?
Posted
技术标签:
【中文标题】为啥循环生成的 Bash 数组值连接在一起?【英文标题】:Why are loop generated Bash array values concatenated together?为什么循环生成的 Bash 数组值连接在一起? 【发布时间】:2022-01-16 23:04:24 【问题描述】:我正在编写一个简短的脚本来自动输出文件名。测试文件夹有以下文件:
test_file_1.fa test_file_2.fa test_file_3.fa到目前为止,我有以下内容:
#!/bin/bash
filenames=$(ls *.fa*)
output_filenames=$()
output_suffix=".output.faa"
for name in $filenames
do
output_filenames+=$name$output_suffix
done
for name in $output_filenames
do
echo $name
done
这个的输出是:
test_file_1.fa.output.faatest_file_2.fa.output.faatest_file_3.fa.output.faa
为什么这个循环会将所有文件名“粘”在一起作为一个数组变量?
【问题讨论】:
您没有定义任何数组。output_filenames=()
【参考方案1】:
shell 数组需要特定的语法。
output_filenames=() # not $()
output_suffix=".output.faa"
for name in *.fa* # don't parse `ls`
do
output_filenames+=("$name$output_suffix") # parentheses required
done
for name in "$output_filenames[@]" # braces and index and quotes required
do
echo "$name"
done
https://tldp.org/LDP/abs/html/arrays.html 有更多使用数组的示例。
“不解析ls
” => https://mywiki.wooledge.org/ParsingLs
【讨论】:
以上是关于为啥循环生成的 Bash 数组值连接在一起?的主要内容,如果未能解决你的问题,请参考以下文章