假设有一个函数/方法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
}
…
或等效的一行一行声明。
是的。可以测试,但一是我找不到任何关于此的问答,二是 - 可能有一些隐藏的警告
答案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
}