함수의 인수로 주어진 변수의 이름에 특정 문자열이 들어 있는지 테스트하고 싶습니다. 그렇지 않으면 다른 동작을 수행합니다. 여기 Bash 변수 이름에 문자열이 포함되어 있는지 확인하십시오.
내가 무엇을 달성하고자하는의 아주 기본적인 설명입니다#!/bin/bash
varA="a"
varB="b"
varC="c"
varD="d"
varE="e"
varF="f"
function1()
{
if name of argument $1 does not contain "A"; then
echo "no A in $1"
further actions done using the value of varA and others...
elif name of argument $1 contains "A"; then
echo "A in $1"
further actions done using the value of varA and others...
fi
}
function1 $varA $varB $varC
function1 $varD $varE $varF
을 실행 할 때 몇 가지 조사를하는 동안 나는 보았다
A in varA
no A in varD
을 줄 것이라고 변수의 이름을 수 $ {! var @}이라고하기 때문에 다음 코드를 시도해 보았습니다.
1 #!/bin/bash
2
3 varA="a"
4 varB="b"
5 varC="c"
6 varD="d"
7 varE="e"
8 varF="f"
9
10 function1()
11 {
12 if [[ "${[email protected]}" != *"A" ]]; then
13 echo "no A in $1"
14 elif [[ "${[email protected]}" == *"A" ]]; then
15 echo "A in $1"
16 fi
17 }
18
19 function1 $varA $varB $varC
20 function1 $varD $varE $varF
e 스크립트를 실행하면 다음과 같은 오류 메시지가 나타납니다.
./testx.sh: line 12: ${[email protected]}: bad substitution
./testx.sh: line 12: ${[email protected]}: bad substitution
어떤 도움을 주실 수 있나요? 당신이
위치 적 인수로는 가능하지 않다고 생각합니다. 함수가 호출 될 때 변수는 이미 값으로 대체되므로 참조 할 변수 이름은 없습니다. – karakfa
이 호출은 실제로'function1 $ varA $ varB $ varC' (제 2 코드 참조)이고 여기에 변수 값을 사용하고 있지는 않지만 실제로 작업중인 실제 스크립트에서는 그 값을 사용하고 싶습니다. 함수에서 다른 작업을 수행하십시오. – arielle
@arielle : 확인. 이 경우에는 불가능합니다. '$ {! prefix @}' "이름이'prefix'"로 시작하는 변수의 이름으로 확장됩니다; 즉, glob'prefix *'와 같지만 쉘 변수의 이름에 해당합니다. 'prefix'는 문자의 문자열입니다. – rici