shスクリプト関数のパラメータ長

shスクリプト関数のパラメータ長

使用しようとしているFreeBSD 9.3 RELEASEサーバーがありますsh。次のように、シェルスクリプトの関数に渡された変数の長さを取得しようとしています。

#!/bin/sh

myfunc() {
  varlength=${#1}
  echo $varlength
}

test="aaaaa aaaaa"
myfunc $test

上記のスクリプトはテスト変数の長さである11を返す必要がありますが、$ {# 1}が機能しないようです。私もこれを達成するために他の多くの方法を試しましたが、それを理解することはできません。

varlength=$(expr ${#1})  does not work
varlength=$(${#1})  does not work
varlength=$(expr \( "X$1" : ".*" \) - 1)  does not work
varlength=$({#1})  does not work

私がした他の多くの試みは失敗しました。

ベストアンサー1

スペースが含まれているので、$test次のように言うと

myfunc $test # without quotes

あなたの関数は1つ以上のパラメータを受け取ります。 myfuncはここで2つのパラメータを受け取りますaaaaaaaaaa

あなたはこれが欲しい:

myfunc "$test" # with quotes

経験則:いつも"$variables"正確にいつ、なぜならないのかを知らない限り、あなたのコメントを引用してください。

おすすめ記事