${#1}の価値はいくらですか?

${#1}の価値はいくらですか?

次の使い方を説明してください${#1}

getlable ()     
{
    if (( ${#1} == 0 )); then test="-"; else test="${1}"; fi;
}

答え1

${#1}$1関数の最初のパラメーターの長さ(文字)。

これは(( ${#1} == 0 ))、最初のパラメータが空であるかどうか(または設定されていないパラメータまたは設定されていないパラメータが拡張されたときに空白と見なされるかどうか)テストする複雑な方法です。

空のパラメータをテストする正式な方法は次のとおりです。

[ -z "$1" ]

ただし、より可能性の高い目的は、関数に引数が指定されていることを確認することです。この場合の構文は次のとおりです。

[ "$#" -eq 0 ]

(または(($# == 0))スクリプトksh / bash / zshを具体的に作成したい場合)

ただし、どちらの場合も、Bourneに似たシェルには次のショートカットがあります。

test=${1:--} # set test to $1, or "-" if $1 is empty or not provided
test=${1--}  # set test to $1, or "-" if $1 is not provided

今、目的が引数が提供されていないとき(stdinを意味する)、渡されるcat他のテキストユーティリティまたはそれを渡すことであれば、-おそらくそれらのどれもまったく必要ありません。

変える:

getlable() {
  test=${1--}
  cat -- "$test"
}

ただし:

getlable() {
  cat -- "$@"
}

関数の引数リストはそのまま渡されますcat。引数がないと、cat引数は受け取られません(その後、単一の引数のようにstdinから読み込まれます-)。 1つ以上の引数がある場合は、すべてそのまま渡されますcat

答え2

${#1}最初の位置引数の長さです。

実行中のシェルで次のものを使用できます。

set -- foo bar
echo ${#1}
3

設定してください。

関連情報