그래서 저는 빈 문자열 변수를 첫 번째 인수로 받고 문자를 두 번째 인수로 받는 bash에 이 함수를 가지고 있습니다.
function check_cases {
case $2 in
r) $1=$(echo "$1 Read");;
w) $1=$(echo "$1 Write");;
x) $1=$(echo "$1 Execution");;
esac
}
문자열 변수를 연결하는 다양한 방법을 시도했지만 항상 다음과 같이 표시됩니다.
=: command not found
= 연산자에 대해. 함수 내부에 로컬 문자열 변수를 생성하고 지웁니다.
local var=""
문자 변수로 전달하십시오.
check_cases "$var" "$char"
현재 상황과 이 문제를 해결하는 방법을 알고 싶습니다.
답변1
뭔가를 하려고 하는 것 같은데참조로 전달유형 기능.
이는 실제로 스크립팅에 적합하지 않습니다 bash
. 우리는 할 수 있다서서히 나아가는명령과 함께 작동 eval
하지만 위험한 동작(문자열에 포함된 명령 평가)이 많기 때문에 권장되지 않습니다.
존재하다이것예를 들어 코드는 다음과 같습니다.
function check_cases {
case $2 in
r) eval $1=\"\$$1 Read\" ;;
w) eval $1=\"\$$1 Write\" ;;
x) eval $1=\"\$$1 Execution\" ;;
esac
}
check_cases var r
check_cases var w
check_cases var x
echo $var
대신 일반적으로 사용하는 것이 더 좋습니다.값으로 전달의미론: 원하는 값을 반환하고 호출자가 이를 변수에 추가하도록 합니다.
예를 들어
function check_cases {
case $1 in
r) echo " Read" ;;
w) echo " Write" ;;
x) echo " Execution" ;;
esac
}
var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"
echo $var
답변2
무엇을 달성하고 싶은지는 명확하지 않지만 어쨌든...
첫째, 할당 구문은 다음과 같습니다.
$val=value
하지만
val=value
그래도
1=value
변수 이름은 숫자로 시작할 수 없기 때문에 작동하지 않습니다.
위치 매개변수에 값을 지정하려면 다음을 수행하십시오.
function check_cases {
case $2 in
r) append=' Read';;
w) append=' Write';;
x) append=' Execution';;
esac
set "$1""$append" "$2" # notice no space between "$1" and "$append"
echo "$@" # print all parameters
echo Number of parameters: $#
}