#!/bin/bash -e
dirs=( * )
for f in "${dirs[@]}"
do
while IFS= read -r line; do
case "$line" in
*disabled\>true* )
sed -i '1i "$f"' list.txt;;
esac
done < "$f/config.xml"
done
我尝试使用echo和printf代替sed,但是文件list.txt始终为空。为什么我不能追加内容到文件中呢?
echo "$f" >> list.txt;;
printf '%s\n' "$f" >> list.txt;;
测试文件夹下的示例config.xml文件:
<?xml version='1.0' encoding='UTF-8'?>
<project>
<disabled>true</disabled>
</project>
目标:如果test/config.xml中有<disabled>true
,则将"test"打印到list.txt文件中。
bash -x yourscript
命令是否显示追加行(其中printf
解决方案最为健壮)是否被调用? - Charles Duffycase
之前无条件地在while read
中立即打印出printf 'line=%q\n' "$line"
,并找到应该触发但实际上没有的单独行,则可以仅包含line
变量的分配以及case
语句,并略去for
循环和不需要任何输入文件作为再现问题的必要部分。 - Charles Duffy"$f"
? - Rany Albeg Wein