使用しようとしている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つのパラメータを受け取りますaaaaa
。 aaaaa
あなたはこれが欲しい:
myfunc "$test" # with quotes
経験則:いつも"$variables"
正確にいつ、なぜならないのかを知らない限り、あなたのコメントを引用してください。