我是新的shell脚本,我想创build一个简单的函数,将返回连接的两个string作为parameter passing。 我试着用下面的代码
function getConcatenatedString() { echo "String1 $1" echo "String2 $2" str=$1/$2 echo "Concatenated String ${str}" echo "${str}" }
//我正在调用上面的函数
constr=$(getConcatenatedString "hello" "world") echo "printing result" echo "${constr}" echo "exit"
使用上面的代码运行脚本时,我会看到下面的输出,
printing result String1 hello String2 world Concatenated String hello/world hello/world exit
如果你看代码,我首先调用函数,然后回显“打印结果”语句,但结果首先是“打印结果”,并在函数内部回显语句。 下面的语句调用函数
build立转速
在linux下签名exe文件
“C”以编程方式清除linux机器上的L2caching
Xlib这是如何(删除窗口装饰)工作?
Azure Ubuntu:为什么temp驱动器挂载到/ mnt?
constr=$(getConcatenatedString "hello" "world")
要么
echo ${constr}
调用函数?
因为如果我注释掉#echo $ {constr},那么没有什么可以回应! 请澄清我。
用于linux C ++的httpparsing库
Mallet在linux中工作,但不在windows中工作
在linux中的内存分配是否无阻塞?
为了部署使用LAMP的网站,我应该学习多lesslinux?
从sockaddr *投射到sockaddr_in *会增加所需的alignment
第一个是调用函数并将所有输出(四个echo语句)存储到$constr 。
然后,返回后,您将回显前导printing result $constr (由四行组成)和退出消息。
这就是$()工作原理,它捕获了封装命令的整个标准输出。
这听起来像你想在控制台上看到一些echo声明,而不是用$()捕获它们。 我认为你应该能够将它们发送到标准错误:
echo "String1 $1" >&2
paxdiablo的解决方案是正确的。 你不能从函数中返回一个字符串,但是你可以捕获函数的输出或者返回一个整数值,这个值可以被调用者从$?获取$? 。 但是,由于所有的shell变量都是全局的,你可以简单地做:
getConcatenatedString() { str="$1/$2"; } getConcatenatedString hello world echo "Concatenated String ${str}"
请注意, function关键字与()是多余的,但function的便携function较差。
一个更灵活,但稍微难以理解的方法是传递一个变量名称,并使用eval以便在调用者的上下文(全局或本地函数)中设置该变量。 在bash中:
function myList() { local _varname=$1 _p _t shift for _p in "$@"; do _t=$_t[$_p] done eval "$_varname=$_t" } myList tmpvar abc echo "result: $tmpvar"
在我的linux桌面上(bash-3.2),比使用``快了3-5倍(10000次迭代),因为后者有进程创建的开销。
如果你有bash-4.2,它的declare -g允许一个函数来设置一个全局变量,所以你可以用下面的代码来替换这个有趣的eval :
declare -g $_varname="$_t"
eval方法类似于TCL的 upvar 1 ,而declare -g类似于upvar #0 。
一些shell内建支持类似的东西,比如带有“-v”的bash的printf ,通过直接分配给一个变量而不是捕获输出来保存进程(对我来说快〜20-25倍)。
总结以上是内存溢出为你收集整理的shell脚本函数返回一个string全部内容,希望文章能够帮你解决shell脚本函数返回一个string所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)