这是我第一次在这里发帖。我不知道是否已经问过这个问题,但我无法在任何地方找到答案。
所以,我试图创建一个创建目录树的小脚本,使用我从调用函数传递的根目录,然后我想返回调用函数的完整路径。这就是我到目前为止所拥有的:
#!/bin/bash
function createLogPath(){
local __BASE="$1/var/log"
local __fullPath=$2
mkdir -p $__BASE
if [ $? -eq 0]
then
__fullPath=$( sed "$__BASE" )
eval $__fullPath
fi
}
正如你可以通过我的代码告诉的那样,有几件事我还没有掌握Bash,因为我只用了一周或者其他东西,所以我'我主要是为测试和学习目的而编写这个脚本。我对这个小函数的意图是创建一个路径来存储给定位置的日志文件,然后返回调用函数的完整路径,以便我可以使用该路径在' ../无功/日志'
但是当我从另一个脚本调用此函数时,就像这样:
#!/bin/bash
. makedir.sh # That's the name of the script where createLogPath() is
BASE=$1
RESULT=''
createLogPath $BASE $RESULT
printf "The path is: %s\n" $RESULT
这不打印任何东西......我想要做的就是返回' ../ var / log ''作为一个字符串,但eval一直将$ __ fullPath视为一个目录而且让我头疼......
从我的代码中可以看出,我不知道自己在做什么,所以请解释一下我做错了什么,以及正确的方法去做我想做的事情。做。任何建议将不胜感激。
答案 0 :(得分:0)
Bash函数参数按值传递,而不是通过引用传递。也就是说,为函数内部的参数赋值不会影响函数外部的变量。
您有两种方法可以从bash函数返回一个字符串:
将其回显到标准输出,例如:
function createLogPath(){
local __BASE="$1/var/log"
mkdir -p $__BASE
if [ $? -eq 0 ]
then
__fullPath=$( sed "$__BASE" )
echo $__fullPath
fi
}
并使用$()运算符检索它,如下所示:
RESULT=$(createLogPath $BASE)
使用导出,如下所示:
function createLogPath(){
local __BASE="$1/var/log"
mkdir -p $__BASE
if [ $? -eq 0 ]
then
__fullPath=$( sed "$__BASE" )
export RESULT=$__fullPath
fi
}
(尽管可以简化,但与原始代码保持一致。)