read コマンドはファイルを読み出せると今頃知った。
いやまあ、この人と同じようなことをやろうとしたら下のほうに。
sh – IFSに改行のみを指定したい – スタック・オーバーフロー
早速実験コードを書いてみたらあら大変。
アスタリスクが展開されているしインデントが消えている。
運よく C 言語ソースの読み込みで試したおかげで即解った。
bashで * が意図しないワイルドカード展開される場合の対処 – 座敷牢日誌
read だとシェルと同じワイルドカード展開をしてしまうのか。
そういうものだと思うしか無いけど。
readするときはIFS=を付けておくとstrictな感じで気持ちが良い – Qiita
while IFS= なんて手段があったのか!
早速試したけどマジでデフォルトに影響しないんだね。
後で IFS をデフォルトに書き戻す必要が無いってこと。
ということで先頭数文字をオフセットして書き出すスクリプトでも。
ちなみに空行でもスルーしてくれるので文字列長を得る必要は無い。
#!/bin/sh
# 先頭の何文字かをオフセットして出力する bash スクリプト
# [スクリプトファイル名] [オフセットしたい数値] [ファイル名]
# 書き出しはリダイレクトを使う
if [[ $# -lt 2 ]]; then
echo $0 [オフセットしたい数値] [ファイル名]
else
while IFS= read -r line; do
echo "${line:$1}"
done < $2
fi
# @ for
#_IFS=$IFS
#IFS=$'\n'
#lines=`cat $2`
#for line in $lines; do
# echo ${line:$1}
#done
#IFS=$_IFS
短っ!
正直スクリプトなんて思ったとおりに動けばそれで充分なんだけどさ。
ココまでスッキリするとチョッピリ嬉しいですね。