abc.txt as
* This
Data1
Dat2
* Comment
data2
data3
当$ line获得*作为第一个char时,它不起作用。它与垃圾相呼应。
我尝试了各种各样的方式,但无法使其工作,如何检查ksh变量中的'*'
while read line
do
fchar=`echo "$line" | cut -c 1-1`
#echo $fchar
if [[ ${char} = "*" ]]; then
continue
fi
if [[ ${char} = "#" ]]; then
continue
fi
echo ${line} >> stuff.txt
done<$abc.txt
感谢。
答案 0 :(得分:1)
需要更多报价。
echo "$line" >>stuff.txt
...不
echo $line >>stuff.txt
...作为后一个字符串拆分和glob扩展行的内容,所以它用当前目录中的文件列表替换*
,用{{1}替换foo[bar]
如果存在该名称的文件,等等。
顺便说一句,您最好只打开foob
一次,而不是每次想要添加新行时重新打开它。这看起来像这样:
stuff.txt
顺便说一下,你也可以用grep:
来做这件事while read; do
fchar=${REPLY:0:1}
[[ "$fchar" = "*" ]] && continue
[[ "$fchar" = "#" ]] && continue
printf '%s\n' "$REPLY"
done >stuff.txt <abc.txt