스크립트 0:

스크립트 0:

function/method 가 있다고 가정해 봅시다 foo. 키워드를 사용하여 local한 줄에 여러 변수를 선언하는 것이 가능합니까, 아니면 각 변수에 대한 선언문으로 구분해야 합니까?

foo()
{
    local x y z
}

또는

foo()
{
    local x
    local y
    local z
}

그리고 더 나아가:

foo()
{
    local -i x -a y  z
}

foo()
{
    local -i x=2 -a y=()  z
}

또는 이에 상응하는 한 줄씩 선언.


예. 테스트는 가능하지만 하나는 이에 대한 Q&A를 찾을 수 없고 두 개는 숨겨진 경고가 있을 수 있습니다.

답변1

그래 넌 할수있어. 한 가지 가능한 경고는 다음과 같습니다.SC2155따로 선언하고 할당해야 하기 때문이죠.

즉, 매개변수 사이에 여러 선언 옵션을 사용하는 것을 제외하고는 여전히 작동합니다. 또한 매개변수 선언은 모든 변수(이 경우 -i)에 적용됩니다.

스크립트 0:

#!/bin/bash

declare a b c
a=foo
b=bar
c=baz

foo () {
    local a=1 b=2 c=3

    echo "From within func:"
    declare -p a
    declare -p b
    declare -p c
}

foo

echo "From outside func:"
declare -p a
declare -p b
declare -p c

산출:

$ ./script.sh
From within func:
declare -- a="1"
declare -- b="2"
declare -- c="3"
From outside func:
declare -- a="foo"
declare -- b="bar"
declare -- c="baz"

스크립트 1:

#!/usr/bin/env bash

declare -i a -a b c
a=foo
b=(bar)
c=baz

foo () {
    local -i a=1 -a b=(2) c=3

    echo "From within func:"
    declare -p a
    declare -p b
    declare -p c
}

foo

echo "From outside func:"
declare -p a
declare -p b
declare -p c

산출:

$ ./script.sh
./script.sh: line 3: declare: `-a': not a valid identifier
./script.sh: line 9: local: `-a': not a valid identifier
From within func:
declare -i a="1"
declare -ai b=([0]="2")
declare -i c="3"
From outside func:
declare -i a="0"
declare -ai b=([0]="0")
declare -i c="0"

답변2

@jesse_b의 훌륭한 답변에 추가됩니다. 나는 이것이 또한 작동한다는 것을 확인할 수 있습니다(그리고 모범 사례를 고려합니다).SC2155):

foo()
{
  local x y z
  x=1
  y=2
  z=3
}

관련 정보