我正在使用bash脚本,我想执行一个函数来打印返回值:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Run Code Online (Sandbox Code Playgroud)
当我执行时fun2,它不会打印"34".为什么会这样?
在BASH中,是否可以在函数体中获取函数名称?以下面的代码为例,我想在其正文中打印函数名"Test",但"$ 0"似乎是指脚本名而不是函数名.那么如何获取函数名称?
#!/bin/bash
function Test
{
if [ $# -lt 1 ]
then
# how to get the function name here?
echo "$0 num" 1>&2
exit 1
fi
local num="${1}"
echo "${num}"
}
# the correct function
Test 100
# missing argument, the function should exit with error
Test
exit 0
Run Code Online (Sandbox Code Playgroud) 我想在shell脚本中获取函数调用者名称,在bash中可以使用 ${FUNCNAME[1]}
${FUNCNAME[1]} 是(来电者姓名)
${FUNCNAME[0]} 是c(现在的名字)
但它不适用于zsh
即我想知道哪个函数在函数c中调用我
function a(){
c
}
function b(){
c
}
function c(){
#if a call me; then...
#if b call me; then...
}
Run Code Online (Sandbox Code Playgroud) 我完全不理解这种行为.
我有一个非常简单的Perl脚本:
#!/usr/bin/perl
use strict;
use warnings;
print "line 1\n";
print STDERR "line 2\n";
Run Code Online (Sandbox Code Playgroud)
如果我从控制台运行它,我会得到我期望的:
$ perl a.pl
line 1
line 2
Run Code Online (Sandbox Code Playgroud)
但如果我将其重定向到文件,我将按相反的顺序获取行:
$ perl a.pl &> a
$ cat a
line 2
line 1
Run Code Online (Sandbox Code Playgroud)
如何以与控制台中相同的顺序将所有输出STDOUT + STDERR捕获到文件中?
作为一个实例,我.bashrc使用以下方式的相对路径,虽然我的问题是关于使用的任何临时变量源其他脚本.bashrc.
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source $DIR/.somefile
现在我把DIR每一个壳弄得乱七八糟.没有明确unset DIR的结尾.bashrc,有没有办法限制变量的范围?
[ 编辑 ]要查看列表:( set -o posix ; set ) | less