次の形式#{string:start:length}
を使用して、wget の.listing
ファイルからファイル名を 1 行ずつ抽出しています。
ファイルのフォーマットは、私たちがよく知っているものだと思います:
04-30-13 01:41AM 7033614 some_archive.zip
04-29-13 08:13PM <DIR> DIRECTORY NAME 1
04-29-13 05:41PM <DIR> DIRECTORY NAME 2
すべてのファイル名は pos:40 から始まるため:start
、39 に設定すると、no :length
should (および do) で各行のファイル名が返されます。
#!/bin/bash
cat .listing | while read line; do
file="${line:40}"
echo $file
done
正しく戻ります:
some_archive.zip
DIRECTORY NAME 1
DIRECTORY NAME 2
ただし、さらにクリエイティブになると、次のように壊れます。
#!/bin/bash
cat .listing | while read line; do
file="${line:40}"
dir=$(echo $line | egrep -o '<DIR>' | head -n1)
if [ $dir ]; then
echo "the file $file is a $dir"
fi
done
戻り値:
$ ./test.sh
is a <DIR>ECTORY NAME 1
is a <DIR>ECTORY NAME 2
何を与える?「ファイル」を失い、テストの残りの部分は、pos:0 から「ファイル ディレクトリ名 1」の上に印刷されるように見えます。
変だな、何のせいだ?