kup*_*sef 19 string bash parameter-passing
我的问题:
#!/bin/bash
function testFunc(){
echo "param #1 is :" $1
echo "param #2 is :" $2
}
param1="param1"
param2="param2"
testFunc $param1 $param2
Run Code Online (Sandbox Code Playgroud)
这样输出是:
param #1 is : param1
param #2 is : param2
Run Code Online (Sandbox Code Playgroud)
但是当我将param1设置为空字符串时:
param1=""
Run Code Online (Sandbox Code Playgroud)
然后输出如下:
param #1 is : param2
param #2 is :
Run Code Online (Sandbox Code Playgroud)
我想问题是当第一个参数为空时,它没有被声明,所以它实际上不会作为函数参数传递.
如果这是问题,那么有没有办法在bash中声明变量"空字符串",或者是否有任何解决方法来获得预期的行为?
注意:如果我调用这样的函数,它按预期工作:
testFunct "" $param2
Run Code Online (Sandbox Code Playgroud)
但我想保持代码清洁.
更新:
我最近发现-u了一个标志,如果即将使用未绑定的变量,它会引发错误.
$ bash -u test.sh
param #1 is : param1
test.sh: line 5: $2: unbound variable
Run Code Online (Sandbox Code Playgroud)
fed*_*qui 33
在第一种情况下,您使用调用脚本testFunct param2.因此,它理解param2为第一个参数.
总是建议在引号内传递参数以避免这种情况(说实话,对我来说这样更清洁).所以你可以打电话给它
testFunct "$param1" "$param2"
Run Code Online (Sandbox Code Playgroud)
所以要传递一个空变量,你说:
testFunct "" "$param2"
Run Code Online (Sandbox Code Playgroud)
看一个例子:
鉴于此功能:
function testFunc(){
echo "param #1 is -> $1"
echo "param #2 is -> $2"
}
Run Code Online (Sandbox Code Playgroud)
我们用不同的方式来称呼它:
$ testFunc "" "hello" # first parameter is empty
param #1 is ->
param #2 is -> hello
$ testFunc "hey" "hello"
param #1 is -> hey
param #2 is -> hello
Run Code Online (Sandbox Code Playgroud)