-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
あなたの場合、最初の数字は1
name変数を表します$1
。これは、コマンドライン(メインプログラムから)を介して渡された最初の引数、または関数に渡された最初の引数です。
したがって、あなたの場合は"${1:0:2}"
次のようになります。
最初の文字であるインデックス0から部分文字列の抽出を開始します。
次の2文字に進んでください。
したがって、操作の後、入力文字列の最初の2文字(インデックス0と1)を取得します。
出力部分文字列が他の文字列と同じであることを確認して[ "${1:0:2}" != $rowArgName ]
ください。[ "${1:0:2}" != $colArgName ]
答え2
抜粋man bash
:
${パラメータ:オフセット:長さ}
部分文字列拡張。指定された文字で始まる
length
値の最大文字まで拡張されます。引数がインデックス配列または関連配列名の場合、以下の説明のように結果が異なります。省略すると、指定された文字で始まり、値の最後まで拡張される値の部分文字列に展開されます。と算術式です(下記の算術評価を参照)。parameter
offset
@
@
*
length
parameter
offset
length
offset
答え3
これは変数から単純な部分文字列を抽出することです。問題の変数はスクリプトの最初のパラメータです(例1
:)。
変数FOOがある場合は、その値の最初の2文字を見ることができます${FOO:0:2}
。あなたの例では、最初のパラメータは同じことを行います。