StringClass.toLowerCase_method <self> ; <LowerStr>="$g_Ret"
指定した文字列を小文字にして返します。
【引数】
self
文字列
(出力)小文字に置き換えた文字列
g_Ret
サンプル
StringClass.toLowerCase_method "ABCDE" ; Assert_func '"$g_Ret" == "abcde"'
テスト
StringClass.toUpperCase_method <self> ; <UpperStr>="$g_Ret"
指定した文字列を大文字にして返します。
【引数】
self
文字列
(出力)大文字に置き換えた文字列
g_Ret
サンプル
StringClass.toUpperCase_method "abcde" ; Assert_func '"$g_Ret" == "ABCDE"'
テスト
StringEscapeUtilsClass.escapeGrep_method <self> ; <EscapedStr>="$g_Ret"
指定した文字列を grep の検索キーワードに使えるようにエスケープします。
【引数】
self
文字列
(出力)エスケープした文字列
g_Ret
サンプル
StringEscapeUtilsClass.escapeGrep_method '[out]' #// $g_Ret == '\[out\]'
grep -r "$g_Ret" *
テスト
StringEscapeUtilsClass.escapeSed_method <self> ; <EscapedStr>="$g_Ret"
指定した文字列を sed の置換前に使えるようにエスケープします。
【引数】
self
文字列
(出力)エスケープした文字列
g_Ret
サンプル
StringEscapeUtilsClass.escapeSed_method '[out]' #// $g_Ret == '\[out\]'
sed -e "s/$g_Ret/xxxx/g" a.txt
テスト
次の関数やコマンドに指定することができます。
StringEscapeUtilsClass.escapeBashReplace_method <self> ; <EscapedStr>="$g_Ret"
指定した文字列を変数の内容を置換する前の文字列に使えるようにエスケープします。
【引数】
self
文字列
(出力)エスケープした文字列
g_Ret
サンプル
StringEscapeUtilsClass.escapeBashReplace_method '(out)'
var="${var//$g_Ret/xxxx}" #// $g_Ret == '\(out\)'
テスト
StringEscapeUtilsClass.escapeBashDoubleQuot_method <self> ; <EscapedStr>="$g_Ret"
指定した文字列を " " で囲まれたリテラル文字列に使えるようにエスケープします。
【引数】
self
文字列
(出力)エスケープした文字列
g_Ret
サンプル
#// Search '\*'
StringEscapeUtilsClass.escapeGrep_method '\*' #// $g_Ret == '\\*'
grep -r "$g_Ret" *
StringEscapeUtilsClass.escapeBashDoubleQuot_method "$g_Ret" #// $g_Ret == '\\\\\*'
echo "Write \"$g_Ret\" at grep keyword."
grep -r "\\\\\*" * #// 上の grep と同じ
テスト
StringEscapeUtilsClass.escapeBashParam_method <self> ; <EscapedStr>="$g_Ret"
指定した文字列を " " や ' ' で囲まないリテラル文字列に使えるようにエスケープします。
【引数】
self
文字列
(出力)エスケープした文字列
g_Ret
サンプル
out="a b.txt"
cp a.txt "$out"
StringEscapeUtilsClass.escapeBashParam_method "$out" #// $g_Ret == 'a\ b.txt'
echo "Write $g_Ret at cp parameter."
cp a.txt a\ b.txt #// 上の cp と同じ
テスト
out="a b.txt"
StringEscapeUtilsClass.escapeBashParam_method "$out" #// $g_Ret == 'a\ b.txt'
eval echo '"a"' > "$g_Ret" #// echo "a" > a\ b.txt
サンプル
MultiLine_func <LineFeedChar> <Lines> ... ; <String>="$g_Ret"
複数の文字列を複数行の文字列にして返します。
【引数】
LineFeedChar
改行文字
1行の文字列の羅列
Lines ...
サンプル
MultiLine_func "$LF" \
"abc" \
"def" \
"ghi"
Assert_func '"$g_Ret" == "abc${LF}def${LF}ghi"'
(出力)複数行の文字列
g_Ret
最終行の末尾に改行は入りません。
最終行の末尾に改行を入れるときは ` ` の外に "$LF" を記述してください。
サンプル
MultiLine_func "$LF" \
"abc" \
"def" \
"ghi"
Assert_func '"$var$LF" == "abc${LF}def${LF}ghi${LF}"'
最終行の末尾に改行は入りません。
MultiLine_func "\n" \
"abc" \
"def" \
"ghi"
Assert_func '"$g_Ret" == "abc\ndef\nghi"'
サンプル
テスト
関連
その他
→ WS
指定した変数の値をダンプします。
CSV 形式の文字列を、配列にします。
配列
参考
配列の要素数を返します。
配列の要素を返します。
配列の要素を設定します。
配列の要素を1つ削除して、後にある要素は前に詰めます。
配列の要素をすべて削除します。
複数行の文字列を1行ずつの配列にします。
CSV 形式の文字列を、配列にします。
配列の要素が同じかどうかを返します。
ArrayClass.getLength_method <self> ; <Length>="$g_Ret"
配列の要素数を返します。
【引数】
self
配列変数の名前
g_Ret
(出力)配列の要素数
テスト
arr=( "a" "b" "c" )
ArrayClass.getLength_method arr
Assert_func '$g_Ret == 3'
サンプル
${#arr[@]}
補足
bash では、配列の要素数は、下記のように取得できます。
ArrayClass.getLength_method は、配列の名前が変数に入っているときに使うと、
読みやすくなります。
ArrayClass.get_method <self> <Index> ; <Element>="$g_Ret"
配列の要素を返します。
【引数】
self
配列変数の名前
Index
配列番号
(出力)配列の要素
g_Ret
arr=( "a b" "c" "d" )
ArrayClass.get_method arr 0
Assert_func '"$g_Ret" == "a b"'
サンプル
テスト
${arr[0]}
補足
bash では、配列の要素は、下記のように取得できます。
ArrayClass.get_method は、配列の名前が変数に入っているときに使うと、
読みやすくなります。
ArrayClass.set_method <self> <Index> <Value>
配列の要素を設定します。
【引数】
self
配列変数の名前
Index
配列番号
設定する配列の要素
Value
arr=( "a" "b" "c" )
ArrayClass.set_method arr 1 "xx"
ArrayClass.get_method arr 1
Assert_func '"$g_Ret" == "xx"'
サンプル
テスト
arr[0]="xx"
補足
bash では、配列の要素は、下記のように設定できます。
ArrayClass.set_method は、配列の名前が変数に入っているときに使うと、
読みやすくなります。
bash では、配列番号 0, 1, 2 の要素があるときに、配列番号 4 の要素を
代入すると、配列番号 0, 1, 2, 4 となり、要素数は 4 になりますが、
ArrayClass.set_method では、配列番号 3 に空文字が入り、要素数は 5
になります。
ArrayClass.remove_method <self> <Index>
配列の要素を1つ削除して、後にある要素は前に詰めます。
【引数】
self
配列変数の名前
Index
削除する要素の配列番号(0以上)
unset arr[0]
補足
bash では、配列の要素は、下記のように削除できます。
ただし、後にある要素は前に詰められません。
arr=( "a" "b" "c" )
ArrayClass.remove_method arr 1
Assert_func '"${arr[0]}" == "a"'
Assert_func '"${arr[1]}" == "c"'
サンプル
テスト
サンプル
ArrayClass.remove_method g_Arguments 1
コマンドラインの第1パラメーターを削除します。
ArrayClass.clear_method <self>
配列の要素をすべて削除します。
【引数】
self
配列変数の名前
arr=( "a" "b" "c" )
ArrayClass.clear_method arr
サンプル
テスト
ArrayClass.fromLines_method <out_Array> <Lines>
複数行の文字列を1行ずつの配列にします。
【引数】
Lines
複数行の文字列。改行は LF(0x0A)
(出力) 配列。 要素は1行
out_Array
関連
テスト
lines=`ls -1`
ArrayClass.fromLines_method arr "$lines" #//[out] arr
サンプル
ArrayClass.fromCSV_method <out_Array> <CSV>
CSV 形式の文字列を、配列にします。
【引数】
CSV
out_Array
CSV 形式の文字列
(出力) 配列
サンプル
テスト
local arr
local csv="ABC, DEF, \"GHI \""
ArrayClass.fromCSV_method arr "$csv" #//[out] arr
Assert_func '"${arr[0]}" == "ABC"'
Assert_func '"${arr[1]}" == "DEF"'
Assert_func '"${arr[2]}" == "GHI "'
IsSameArrayOutOfOrder_func <ArrayALength> <ArrayA> <ArrayB> ; <Is>="$g_Ret"
配列の要素が同じかどうかを返します。 要素の順番は違っても同じとします。
【引数】
ArrayA
ArrayALength
配列A
配列Aの要素数
サンプル
テスト
arr1=( "a" "b" "c" )
arr2=( "b" "c" "a" )
IsSameArrayOutOfOrder_func ${#arr1[@]} "${arr1[@]}" "${arr2[@]}"
if [ "$g_Ret" == "0" ];then Error_func ;fi
ArrayB
g_Ret
配列B
(出力)同じ=1、違う=0
その他
連想配列の宣言を行います。
連想配列の値を返します。
連想配列の値を、設定します。
連想配列にあるすべてのキーを返します。
連想配列の要素数を返します。
連想配列にあるすべての値を返します。
連想配列を削除します。
配列、または、連想配列をコピーします。
配列型の属性の値を取得します。
配列を生成して連想配列に代入します。
連想配列を生成して別の連想配列に代入します。
参考
if [ "${BASH_VERSINFO[0]}" -ge "4" ];then
declare_AssociativeArrayClass="declare -A" #// bash ver4
else
declare_AssociativeArrayClass="declare" #// bash ver3
fi
#// global variables as associative arrray
$declare_AssociativeArrayClass g_ObjectA
$declare_AssociativeArrayClass g_ObjectB
g_Objects=( "g_ObjectA" "g_ObjectB" )
function InitObjs_func()
{
local obj
obj=g_ObjectA #// obj=&g_ObjectA
SetAttr_func $obj "Attr1" "Value1" #// obj->Attr1 = "Value1"
SetAttr_func $obj "Attr2" "Value2" #// obj->Attr2 = "Value2"
obj=g_ObjectB #// obj=&g_ObjectB
SetAttr_func $obj "Attr1" "Value1"
SetAttr_func $obj "Attr2" "Value4"
}
function Main_func()
{
InitObjs_func
for obj in ${g_Objects[@]};do
Attr_func $obj "Attr2" #// obj->Attr2
echo "$g_Ret"
done ; done_func $?
}
declare を関数内で実行するとローカル、関数の外で実行するとグローバルになります。
関数の引数には指定できません。 なので、オブジェクトはグローバルにせざるを得ない
でしょう。
属性(メンバー変数)
メソッド(メンバー関数)
if [ "${BASH_VERSINFO[0]}" -ge "4" ];then
declare_AssociativeArrayClass="declare -A" #// bash ver4
else
declare_AssociativeArrayClass="declare" #// bash ver3
fi
#// global variables as associative arrray
$declare_AssociativeArrayClass g_ObjectA
$declare_AssociativeArrayClass g_ObjectB
g_Objects=( "g_ObjectA" "g_ObjectB" )
function InitObjs_func()
{
local obj
obj=g_ObjectA
SetAttr_func $obj "Class" "AClass"
SetAttr_func $obj "Attr1" "Value1"
SetAttr_func $obj "doA_method" "AClass.doA_method"
obj=g_ObjectB
SetAttr_func $obj "Class" "BClass"
SetAttr_func $obj "Attr1" "Value1"
SetAttr_func $obj "doA_method" "BClass.doA_method"
}
function Main_func()
{
local obj
InitObjs_func
for obj in ${g_Objects[@]};do
Attr_func $obj "doA_method" ; $g_Ret $obj
done
}
function AClass.doA_method()
{
local self="$1"
echo "AClass.doA_method( $self )"
}
function BClass.doA_method()
{
local self="$1"
echo "BClass.doA_method( $self )"
}
g_SetupFileNames=( "./Child1.sh" "./Child2.sh" )
function Main_func()
{
local name_sh ; local result
for name_sh in ${g_SetupFileNames[@]};do
$name_sh --FuncA_func --Param1=Value1 --Param2=Value2
done
for name_sh in ${g_SetupFileNames[@]};do
result=`$name_sh --FuncB_func --Param1=Value1`
echo "\$result = $result"
done
}
Main.sh
g_AllArguments="$@"
g_FuncName=${1#--*} #// cut -- from $1
function Main_func()
{
$g_FuncName $g_AllArguments
}
function FuncA_func()
{
echo "FuncA_func in Package1.sh"
}
function FuncB_func()
{
echo "FuncB_func in Package1.sh"
}
Child1.sh
g_AllArguments="$@"
g_FuncName=${1#--*} #// cut -- from $1
function Main_func()
{
$g_FuncName $g_AllArguments
}
function FuncA_func()
{
echo "FuncA_func in Package1.sh"
}
function FuncB_func()
{
echo "FuncB_func in Package1.sh"
}
Child2.sh
関数名は、クラス名+Class+ピリオド+メソッド名_method。
クラス名は、単語の先頭は大文字、後は小文字。(Java準拠)
メソッド名は、先頭の単語はすべて小文字、後の単語は先頭文字のみ大文字。(Java準拠)
メソッドに相当する関数の第1引数は、オブジェクトの名前(=連想配列の名前)。
関数内では、self という変数名にする。
function SampleClass.doSample_method()
{
local self="$1"
サンプル
オブジェクトの名前を、ファイル名、または、第1パラメーターにします。
メソッド名を、関数名と同じ、パラメーターなしのオプションにします。
メソッドのパラメーターを、パラメーターありのオプションにします。