次の.shファイルを実行した場合:
#!/bin/sh -a
echo "a" | sed -e 's/[\d001-\d008]//g'
結果はエラーです:
sed:-e expression#1、char 18:無効な範囲終了
しかし、次の.shファイルを実行すると:
#!/bin/sh
set -a
echo "a" | sed -e 's/[\d001-\d008]//g'
エラーなしで実行されます。2番目のコードは最初のコードと同等であると想定されていませんか?最初のエラーはなぜですか?
LC_COLLATE=C(またはPOSIX)sed
POSIXLY_CORRECT=y環境内で呼び出しますが、2番目のスクリプトは環境内にありませんPOSIXLY_CORRECT。両方のスクリプトを呼び出すシェルはPOSIXLY_CORRECT、その環境にはありません。
echo "a" | POSIXLY_CORRECT=y sed -e 's/[\d001-\d008]//g' 問題を再現してください
shが同じというわけではありません。すべてのsedも同等ではありません。どちらshを使用していますか?どのOSで?そして、どのsed(たぶんsed --version失敗しない場合は?)