我对linux shell脚本有点新意,所以这可能是一个非常愚蠢的问题。
这是一个简单的示例代码(当然它不起作用,但我希望展示我想做的事):
#!/bin/bash
function AppendLetters() {
# Value sent as parameter: $1
$1= "$1"LLL
}
var="foo"
AppendLetter $var
echo "$var"
因此,从命令行调用程序时:
$ ./example.sh
我想修改内部变量某种:
fooLLL
执行此操作的原因:我有一个脚本可以从配置文件加载多个变量,并希望进行相同的修改对于那些变量,以便在我的程序中使用它们。
有可能吗?函数可以修改作为参数发送的变量吗?
答案 0 :(得分:2)
从Bash 4.3.0开始,您可以使用declare -n
获取函数中变量的引用:
AppendLetters() {
declare -ln ref="$1"
ref+="LLL"
}
var="foo"
AppendLetters "var"
echo "$var"
fooLLL
来自help declare
:
-n make NAME a reference to the variable named by its value
编辑:感谢@gniourf_gniourf建议此printf
,您可以在旧版BASH中执行此操作:
AppendLetters() { printf -v "$1" '%sLLL' "${!1}"; }
var="foo"
AppendLetters "var"
echo "$var"
fooLLL
答案 1 :(得分:2)
不需要bash 4.3,使用variable indirection:
AppendLetters() {
declare -g "$1"="${!1}LLL"
}
var=f00
AppendLetters var
echo "$var"
f00LLL
声明的-g
选项是必要的,这样就不会将赋值视为函数的本地。
假设:
我有一个脚本从配置文件加载多个变量,并希望对这些变量进行相同的修改,以便在我的程序中使用它们。
我会使用bash' +=
赋值运算符
varlist=( var1 var2 var3 )
for varname in "${varlist}"; do
declare "$varname"+="LLL"
done