この文脈で${1:0:2}はどういう意味ですか?

この文脈で${1:0:2}はどういう意味ですか?

-r行/列パラメータがまたはで始まるかどうかを確認するために、入力を確認する以下のコードを見ています-c${1:0:2}この場合、どういう意味ですか?

rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
   echo $correctCmdMsg >&2
   exit 1
fi

答え1

これはシェルのサブストリング拡張(パラメーター拡張のサブクラス)モードです。

形式は次のとおりです。

${parameter:offset:length}

そしてインデックスは0から始まります。

変数があり、最初の2文字(位置0から次の2まで)を生成するとしfooます${foo:0:2}

例:

$ foo=spamegg
$ echo "${foo:0:2}"
sp

あなたの場合、最初の数字は1name変数を表します$1。これは、コマンドライン(メインプログラムから)を介して渡された最初の引数、または関数に渡された最初の引数です。

したがって、あなたの場合は"${1:0:2}"次のようになります。

  • 最初の文字であるインデックス0から部分文字列の抽出を開始します。

  • 次の2文字に進んでください。

したがって、操作の後、入力文字列の最初の2文字(インデックス0と1)を取得します。

出力部分文字列が他の文字列と同じであることを確認して[ "${1:0:2}" != $rowArgName ]ください。[ "${1:0:2}" != $colArgName ]

答え2

抜粋man bash:

${パラメータ:オフセット:長さ}

部分文字列拡張。指定された文字で始まるlength値の最大文字まで拡張されます。引数がインデックス配列または関連配列名の場合、以下の説明のように結果が異なります。省略すると、指定された文字で始まり、値の最後まで拡張される値の部分文字列に展開されます。と算術式です(下記の算術評価を参照)。parameteroffset@@*lengthparameteroffsetlengthoffset

答え3

これは変数から単純な部分文字列を抽出することです。問題の変数はスクリプトの最初のパラメータです(例1:)。

変数FOOがある場合は、その値の最初の2文字を見ることができます${FOO:0:2}。あなたの例では、最初のパラメータは同じことを行います。

関連情報