shell脚本函数返回一个string

shell脚本函数返回一个string,第1张

概述shell脚本函数返回一个string

我是新的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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1283310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存