9.4.11 adshvarconvコマンド(変数の値を変換する)
形式
adshvarconv [-o] -p シェル変数名 [シェル変数名 ・・・] adshvarconv [-o] [-c] -b 変換前文字列 [-a 変換後文字列] シェル変数名 [シェル変数名 ・・・] adshvarconv [-o] -i \の増加数 シェル変数名 [シェル変数名 ・・・] 【Windows限定】 adshvarconv [-o] [-u] -e 変換前エンコーディング 変換後エンコーディング シェル変数名 [シェル変数名 ・・・]
機能
オプションに従って変数の値を変換します。
オプション |
機能 |
---|---|
-p |
パス変換ルールに従ってシェル変数値を変換します。 |
-b,-a,-c |
シェル変数値の変換前文字列を変換後文字列に変換します。 |
-i |
シェル変数値の\を指定個数分増加します。 |
-e,-u |
シェル変数値のコード変換を行います。【Windows限定】 |
-oオプションについて次に示します。
-oオプション |
出力先 |
---|---|
無し |
元のシェル変数値を変換後の値で更新します。 |
有 |
元のシェル変数値は変更せずに,変換後の値を標準出力に出力します。 |
引数
- -p
-
パス変換ルール(PATH_CONV_ENABLE,PATH_CONV 環境設定パラメーター)に従って,シェル変数の値を変換します。adshvarconvコマンド実行時に変換します。このため,コマンド実行後に変数の値を変更した場合,その値は自動的に変換されません。この変更後の値がパス変換ルールに一致する値であっても,自動的に変換しません。
パス変換の動作は,変換ルールとは異なります。パス変換の動作を次に示します。
パス変換動作
PATH_CONV_ENABLEで指定したパス区切り文字で区切られた,それぞれのパスを環境設定パラメーターPATH_CONVで変換する。
注 環境設定パラメーターではWindowsのディレクトリ区切り記号は\\と記述しますが,このコマンドの変換では\2個を\1個に自動的に変更して変換します。
PATH_CONV環境設定パラメーターで変換した場合,パス区切り文字,ディレクトリ区切り文字を該当OSの区切り文字に変換します。
注 通常のパス変換機能ではWindowsのディレクトリ区切り記号は\\に変換しますが,このコマンドの変換では\1個に変換します。
パス変換機能が無効のとき,このコマンドは何もしません。
- -b 変換前文字列 [-a 変換後文字列]
-
シェル変数値の変換前文字列を変換後文字列に変換します。-aを指定しない場合は,変換前文字列を削除します。
変換前文字列~<任意文字列>((1から256バイト))
変換後文字列~<任意文字列>((1から256バイト))
- -c
-
パス変換機能が有効の場合だけ変換します。パス変換機能が無効のときは,このコマンドは何もしません。-c指定がないときは,無条件に変換します。
- -i \の増加数
-
シェル変数値の\をそれぞれの文字に対して,指定個数分増加します。-i 1と指定した場合,変換前の文字列がabc\def\\ghi\\\jklであれば,変換後はabc\\def\\\\ghi\\\\\\jklです。
\の増加数~<3桁の十進数>((1~256))
- -e 変換前エンコーディング 変換後エンコーディング【Windows限定】
-
シェル変数の値をコード変換します。
-
変換前エンコーディング~{SJIS | UTF8}
SJIS:エンコーディングがShift-JISであることを示します。
UTF8:エンコーディングがUTF-8であることを示します。
-
変換後エンコーディング~{SJIS | UTF8}
SJIS:エンコーディングがShift-JISであることを示します。
UTF8:エンコーディングがUTF-8であることを示します。
変換前エンコーディングと変換後エンコーディングの組み合わせの妥当性チェックはしません。
-
- -u
-
コード変換時に変換できないコードがあった場合,エラー終了します。
-uオプションを指定しない場合,変換できない文字を「?」に変換して処理を続行します。
- -o
-
変換後の値を標準出力に出力します。シェル変数値は更新しません。
-oオプションを指定する場合,複数のシェル変数名を指定できません。配列で複数要素を指定することもできません。
-eオプション以外の場合,変換をしない場合でも-oオプションがあるときは,変換前の変数の値を標準出力に出力します。
-eオプションでは変換できなかったときは-oオプションがあっても標準出力には結果を出力しません。
- シェル変数名 ~<シェル変数名>((1から256))
-
値を変更するシェル変数を指定します。長さの上限は,配列の場合,引数指定を含んだ文字列の長さの上限です。
配列を指定する場合は次の形式で指定します。
配列の要素番号は0から65,535まで指定できます。
配列の指定方法
説明
array[n]
n番目の要素
array[@]
全要素
array[*]
全要素
array[]
array[0]と同一
array[n][m]
n行m列の要素
array[n][@]
n行目のすべての要素
array[n][*]
n行目のすべての要素
array[n][]
array[n][0]と同一
array[@][m]
m列のすべての要素
array[@][@]
すべての要素
array[@][*]
すべての要素
array[@][]
すべての要素
array[*][m]
m列のすべての要素
array[*][@]
すべての要素
array[*][*]
すべての要素
array[*][]
すべての要素
array[][m]
array[0][m]と同一
array[][@]
すべての要素
array[][*]
すべての要素
array[][]
array[0][0]と同一
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1 |
|
注意事項
-
同一変数を複数回指定すると2重に変換します。
-
配列変数で指定した要素が存在しないとき,エラーにしないで後続の変数の処理をします。
-
指定した変数名が存在しないとき,エラーにしないで後続の変数の処理をします。
-
右詰め属性などで値が変数格納時に加工されている場合,パス変換ルールによる変換では,属性によって加工された値を変換ルールと評価するため,変換対象にならないことがあります。
-
変換後の値は変数の属性によって加工されることがあるので注意が必要です。
たとえばtypeset -R10(右詰で領域長が10文字)の場合,変換後の値が領域長を超えると,仕様に従って切り捨てが発生します。また,先頭の空白を削除しても領域長より短い場合は先頭に空白が挿入されます。
使用例
-
ジョブ定義スクリプト起動時のパラメーターにパスが指定されていて,それをPATH_CONVの変換ルールで変換したい場合。
-
環境設定パラメーター
#-adsh_conf PATH_CONV_ENABLE / : #-adsh_conf PATH_CONV_RULE 2 #-adsh_conf PATH_CONV /home/user001 "d:\\user001"
-
ジョブ定義スクリプト(sample.ash)
infile=$1 adshvarconv -p infile "${ADSH_DIR_CMD}cat" ${infile}
-
実行例
D:\user001>cat d:\user001\zzzz.txt Data_zzzz.txt(d:\user001\zzzz.txtファイルの内容) D:\user001>adshexec -m MINIMUM sample.ash /home/user001/zzzz.txt Data_zzzz.txt(d:\user001\zzzz.txtファイルの内容)
-
-
ファイルに記述されたパスを引数の値で変換する場合。
-
ジョブ定義スクリプト(sample.ash)
while read LINE do adshvarconv -b "/home/user1" -a "$1" LINE adshvarconv -b "/" -a "\\" LINE echo -E "$LINE" >&2 done < input.txt
-
input.txt
/home/user1/data001 /home/user1/data002
-
実行例
D:\user001>adshexec -m MINIMUM sample.ash D:/home/winuser001 D:\home\winuser001\data001 D:\home\winuser001\data002
-
-
入力データから\deの文字列を削除する場合。
-
ジョブ定義スクリプト(sample.ash)
echo -E 'abc\de\kkk' >test.txt echo -E '123\de\kkk' >>test.txt "${ADSH_DIR_CMD}cat" test.txt >&2 echo -E start_sed >&2 "${ADSH_DIR_CMD}cat" test.txt | "${ADSH_DIR_CMD}sed" -e 's/\de//' >&2 echo -E start_adshvarconv >&2 while read -r LINE do adshvarconv -o -b '\de' LINE >&2 done < test.txt
-
実行結果
abc\de\kkk 123\de\kkk start_sed abc\\kkk 123\\kkk start_adshvarconv abc\kkk 123\kkk
sedコマンドのパターンに指定した文字列の\はエスケープ文字として扱われるため,正しく\deの文字列の削除ができません。
-
-
awkコマンドにパス名を渡す時に\を1個増加して,エスケープ文字の処理で\が消えないようにする場合。
-
ジョブ定義スクリプト(sample.ash)
aa=d:\\g1234z\\azzzz echo -E 'hitachi' | "${ADSH_DIR_CMD}awk" -v VVV1=$aa '/hitachi/ { \ print "VVV1=" VVV1 ; \ }' >&2 adshvarconv -i 1 aa echo -E 'hitachi' | "${ADSH_DIR_CMD}awk" -v VVV1=$aa '/hitachi/ { \ print "VVV1=" VVV1 ; \ }' >&2
-
実行例
D:\user001>adshexec -m MINIMUM sample.ash VVV1=d:g1234zzzzz VVV1=d:\g1234z\azzzz
-
-
ファイルをreadで読んでUTF-8からShift-JISに変換する場合。
-
ジョブ定義スクリプトファイル(sample1.ash)
echo -E "--- before ---" "${ADSH_DIR_CMD}ls" outdir while read LINE do "${ADSH_DIR_CMD}cp" $(adshvarconv -o -e UTF8 SJIS LINE) outdir done < input.txt echo -E "--- after ---" "${ADSH_DIR_CMD}ls" outdir
-
input.txtファイル(UTF-8)
東京.txt 京都.txt
-
実行例
D:\user001>adshexec -m MINIMUM sample.ash --- before --- --- after --- 京都.txt 東京.txt
-