次の.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
失敗しない場合は?)