我有一个文件“a.txt”,其中包含带路径的文件名。
A.TXT:
/root/chan/properties.lo
/root/attributes.cc
/root/chan/eagle/bath.ear
我想提取这些文件名并将它们放在一个变量中:
#!/bin/bash
for i in $(cat a.txt); do
o+=$(basename $i)
done
echo $o
但它不起作用。 我在说:
feedBackMailConfiguration.xmltiess
请帮助。
答案 0 :(得分:2)
while read -r i;
do
o=$o" "$(basename $i)
done < a.txt
echo $o
以上都会这样做。 (编辑复制和粘贴错误)
更多编辑:刚试过这个(终结者,ubuntu),它给出了正确的结果:
while read -r i; do o="$o $(basename $i)";done < a.txt
答案 1 :(得分:0)
您只需要在脚本中添加空格连接,如下所示:
#!/bin/bash
for i in $(cat a.txt); do
# Check the " " at the end of the following line
o+=$(basename $i)" "
done
echo $o
它会起作用
答案 2 :(得分:0)
“o + = ...”实际上不是可移植的(哪个版本的bash允许它?我从未看到它直到你提到它?它看起来像perl机制)
Edit2:关于输出是什么的vladintok评论,我添加了DEBUG信息以试图找出问题
Edit3:尝试取消报告的奇怪输出的每个可能解释的另一步...我unalias,并取消设置任何名为“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:我将Pantoine指出的o=$o" "$(basename $i)
更正为o="${o} $(basename $i)"
。否则,toto = $ toto“”titi:将分配给toto所有东西,直到第一个空格(在第一次迭代之后或者如果basename包含空格的$ toto之内)...