사용하려고 하는 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"
정확히 언제, 왜 안되는지 알지 않는 한 귀하의 의견을 인용하십시오 .