Mri*_*hal 114 shell return-value
我想从shell脚本中调用的函数返回值.也许我错过了语法.我尝试使用全局变量.但这也行不通.代码是:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
Run Code Online (Sandbox Code Playgroud)
oli*_*bre 247
Bash函数不能像您希望的那样直接返回字符串.你可以做三件事:
对于其他一些shell也是如此.
以下是如何执行以下每个选项:
lockdir="somedir"
testlock(){
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
echo "$retval"
}
retval=$( testlock )
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
Run Code Online (Sandbox Code Playgroud)
lockdir="somedir"
testlock(){
if mkdir "$lockdir"
then # Directory did not exist, but was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval=0
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval=1
fi
return "$retval"
}
testlock
retval=$?
if [ "$retval" == 0 ]
then
echo "directory not created"
else
echo "directory already created"
fi
Run Code Online (Sandbox Code Playgroud)
lockdir="somedir"
retval=-1
testlock(){
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval=0
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval=1
fi
}
testlock
if [ "$retval" == 0 ]
then
echo "directory not created"
else
echo "directory already created"
fi
Run Code Online (Sandbox Code Playgroud)
Wil*_*ell 16
你的工作方式太难了.你的整个脚本应该是:
if mkdir "$lockdir" 2> /dev/null; then
echo lock acquired
else
echo could not acquire lock >&2
fi
Run Code Online (Sandbox Code Playgroud)
但即使这样也可能过于冗长.我会编码:
mkdir "$lockdir" || exit 1
Run Code Online (Sandbox Code Playgroud)
但产生的错误信息有点模糊.
gle*_*man 12
如果它只是一个真/假测试,那么你return 0
有成功和return 1
失败的功能.那么测试将是:
if function_name; then
do something
else
error condition
fi
Run Code Online (Sandbox Code Playgroud)
Ris*_*sal 10
如果您有一些参数要传递给函数并需要返回值。在这里,我将“12345”作为参数传递给函数,并在处理后返回变量 XYZ,该变量将被分配给 VALUE
#!/bin/bash
getValue()
{
ABC=$1
XYZ="something"$ABC
echo $XYZ
}
VALUE=$( getValue "12345" )
echo $VALUE
Run Code Online (Sandbox Code Playgroud)
输出:
something12345
Run Code Online (Sandbox Code Playgroud)