"o+=..." 不是真正可移植的(哪个版本的 bash 允许它?在你提到它之前我从未见过它?它看起来像 perl 机制)
Edit2:在 vladintok 对输出的评论之后,我添加了 DEBUG 信息以尝试查明问题
Edit3:尝试排除对报告的奇怪输出的所有可能解释的另一个步骤......我取消别名,并取消设置任何名为“o”和“basename”的函数......
尝试:
#!/bin/bash
unalias o 2>/dev/null
unalias basename 2>/dev/null
unset o 2>/dev/null
unset basename 2>/dev/null
for i in $(cat a.txt); do
printf 'DEBUG: i is: %s\n' "$i"
o="${o} $(basename $i)"
done
printf 'DEBUG: final o is: %s\n' "$o"
echo $o
#end of the script.
(当然上面是一个SINGLE文件。命名为'test.bash',使其可执行:chmod +x test.bash
,然后执行它./test.bash
:)
Edit1:我纠正了o=$o" "$(basename $i)
Pantoineo="${o} $(basename $i)"
指出的错误。否则, toto=$toto" "titi : 将分配给 toto 直到第一个空格的所有内容(它将在 $toto 内的某个地方,在第一次迭代之后或者如果基本名称包含空格)...