(for Internet Explorer)
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パラメーターにします。
メソッド名を、関数名と同じ、パラメーターなしのオプションにします。
メソッドのパラメーターを、パラメーターありのオプションにします。