小编how*_*rks的帖子

除非我回显返回值,否则不会调用Bash函数

在我的程序中,我试图从函数返回一个值,返回值是字符串.一切正常(至少某些部分),如果我在返回后回显值,但它甚至没有调用函数,如果我不返回....考虑下面的代码....

#!/bin/bash

function get_last_name() {
    echo "Get Last Name"
    ipath=$1

    IFS='/'
    set $ipath
    for item
            do
                    last=$item
            done

    echo $last
}

main() {
    path='/var/lib/iscsi/ifaces/iface0'
    current=$(get_last_name "$path")
    echo -n "Current="
    echo $current
}


main
Run Code Online (Sandbox Code Playgroud)

它给了我这样的输出

OUTPUT
     Current=Get Last Name iface0
Run Code Online (Sandbox Code Playgroud)

如果我评论echo $ current,那么我甚至没有看到"Get Last Name",它得出结论,它甚至没有调用函数.请让我知道我犯了什么错误.但有一点我肯定,bash是我见过的最丑的语言.......

bash shell

2
推荐指数
1
解决办法
3047
查看次数

当我们抛出一个对象/变量来捕获时会发生什么?

两个问题1)当抛出一个Object /变量时会发生什么?比如说,

int foo() {
   FILE *fp = ....;
   int dummy = 10;
   int *dummy_ptr = new int[10];
   throw 1;
}

int main() {
 try {
   foo();
 } catch (int &i) { 
   std::cout<<"ERROR, the value is "<<i<<std::endl;
 }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这里会发生什么?创建一个新变量然后传递???

如果我使用指针或没有引用的变量该怎么办

喜欢catch(int*i)//或catch(int i)

此外,在范围内声明或启动的所有变量/资源是否已被释放/关闭?

2)同样在重新抛出的情况下,如果我计划用引用重新抛出,则第二个catch获取一个新变量,如果我在没有引用(即)值的情况下重新抛出,那么在中间抛出中完成的更改不会受到影响....

int goo() {
    throw 2;
}

int foo() {
   try{
      goo();
   } catch(int &i) { // (or) catch(int i) // i is not changing in the next line.
      i = 2;
      throw;
   }
}

int …
Run Code Online (Sandbox Code Playgroud)

c++ exception throw rethrow

1
推荐指数
1
解决办法
1443
查看次数

将 size_t 转换成 long,有什么缺点吗?

将 size_t 转换为 long 有什么缺点吗?因为,我正在编写一个在文件中维护 links_list 的程序。因此,我基于 size_t 遍历到另一个节点,并且还将列表总数记录为 size_t。因此,显然会有一些转换或添加 long 和 size_t。这有什么缺点吗?如果有的话,我会把所有东西都做的一样长,而不是 size_t,甚至是尺寸。请指教。

c++ sizeof size-t type-conversion long-integer

1
推荐指数
1
解决办法
6092
查看次数

如何检查字符串的第一个字符是否是bash中的数字?

我正在用bash编写一个xml元素.我需要将一些以数字开头的字符串替换为以字符开头的字符串,因此它是一个有效的XML标记(请记住xml标记不能以字母数字字符开头).

例如,

  str = 192.16.76.52,1001
Run Code Online (Sandbox Code Playgroud)

这不是一个有效的xml标签,即我做不到

<192.16.76.52,1001>
.....
</192.16.76.52,1001>
Run Code Online (Sandbox Code Playgroud)

所以,我打算检测它是否是一个数字,并用类似的东西替换它

IP192.16.76.52
Run Code Online (Sandbox Code Playgroud)

我知道我可以用IFS来做,但可能需要很长时间和额外的代码.

由于您了解主要问题,请随时发表评论或提供建议.

谢谢

regex xml bash shell

1
推荐指数
1
解决办法
1845
查看次数

标签 统计

bash ×2

c++ ×2

shell ×2

exception ×1

long-integer ×1

regex ×1

rethrow ×1

size-t ×1

sizeof ×1

throw ×1

type-conversion ×1

xml ×1