$ {#1}の価値は?


9

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

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

1
ただ不思議に思っています:echo ${#1}値を確認するために、その前にそのステートメントを入力する気になりましたか?もしそうなら、あなたは一般的にその研究で見つけたものを質問に含めるべきであり、おそらくそれが役に立たなかった理由の説明を含めるべきです。
jpmc26 2016年

回答:


24

${#1}長さ(文字数)で$1、関数の最初の引数です。

したがって(( ${#1} == 0 ))、最初の引数が空である(または未設定の場合、未設定のパラメーターは展開時に空として表示される)かどうかをテストする複雑な方法です。

空のパラメータをテストするための標準的な方法は次のとおりです。

[ -z "$1" ]

しかし、そこには、引数が関数に提供されているかどうかをチェックする意図があり、その場合の構文は次のようになります。

[ "$#" -eq 0 ]

(または(($# == 0))、スクリプトをksh / bash / zsh固有にする場合)。

ただし、どちらの場合でも、ボーンのようなシェルにはそのためのショートカットがあります。

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

引数が指定されていないときに(標準cat入力を-意味する)が渡されるように、それを他のテキストユーティリティに渡すことが目的である場合は、まったく必要ない可能性があります。

の代わりに:

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

ただやる:

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

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


これが優れた答えを提供する方法です:)
Yerken '28年

4

${#1} 最初の定位置パラメーターの長さです。

実行中のシェルで使用できます

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

それらを設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.