bash 함수의 switch 문에서 빈 문자열 변수를 수정합니다.

bash 함수의 switch 문에서 빈 문자열 변수를 수정합니다.

그래서 저는 빈 문자열 변수를 첫 번째 인수로 받고 문자를 두 번째 인수로 받는 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: $#
}

관련 정보