次の使い方を説明してください${#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
設定してください。