ksh变量中的星号

时间:2014-02-07 17:48:09

标签: shell unix ksh

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

感谢。

1 个答案:

答案 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