KSHではソース文字列は無効ですが、BASHでは無効です。

KSHではソース文字列は無効ですが、BASHでは無効です。

次のコマンドを使用してランダムな文字列を生成しようとしています。

tr -dc 'A-Za-z0-9!#$%&()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c16; echo; 

AIXおよびLinuxで実行する必要があるシェル・スクリプトの関数にこのコマンドを入れる必要があります。 AIXシステムにはbashがインストールされていないため、ksh93を使用する必要があります。 bash(またはzsh)でこのコマンドを実行しようとすると、期待どおりに機能します。ただし、KSH では「無効なソース文字列」のため失敗します。

文字列を並べ替えて一部の文字を削除しようとしましたが、成功しませんでした。出力は次のとおりです

tr: A-Za-z0-9!#$%&()*+,-./:;<=>?@[\]^_`{|}~: invalid source string

この文字列を機能させるには、どのようにkshに渡すべきですか?

事前にありがとう

答え1

ありがとうございます @glenn-jackman:

私が削除したとき

\

リストで次のエラーが発生します。

invalid multibyte character byte

ただし、これを防ぐにはLC_ALLを設定する必要があることはすでにわかっています。これで文字列をエスケープします。これ布材彫刻は

LC_ALL=C tr -dc 'A-Za-z0-9!#$%&()*+,\-./:;<=>?@[\\]^_`{|}~' < /dev/urandom | head -c16; echo;

ありがとう

関連情報