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
}