#!/bin/bash
message=""
for f in /mnt/backup/*; do
if [ -d "$f" ]; then
message+="${f} is a folder"$'n'
fi
done
if [ -z "$message" ]; then
echo "No folders found"
fi
echo "$message"
我有这个代码,我想追加文本和一个新的行消息。这几乎可以正常工作。但是它的输出是这样的:
/mnt/backup/a is a folder
/mnt/backup/b is a folder
/mnt/backup/c is a folder
/mnt/backup/d is a folder /mnt/backup/e is a folder
有人知道为什么最后一个文件夹写在前一个文件夹旁边吗?
编辑:当我回显这个消息时,它打印出来很好。但是当我尝试通过邮件发送该消息时,它会输出如上所述的消息。
试试这个
#!/bin/bash
message=""
for f in aaa bbb ccc; do
message+="${f} is a folder"$'n'
done
echo "$message"
也许你试过echo $message
等。这将导致shell将行解释为由空格分隔,因为换行字符也是一个空白字符,并且它将在那里被分割。为了防止这种情况,需要使用双引号。