shell脚本中的变量范围

时间:2015-05-11 06:14:13

标签: linux bash shell

我是shell脚本新手。如果用户输入1,2,3,4 ... 9(小于10),我的目的是打印01,02,03 ... 09之类的数字。我编写了下面的代码,但是lst行打印的值只有一位数。

issuehour()
{
  issue_hour="$1";

  if [ $issue_hour -lt 10 ] then 
    h="0"$issue_hour
    return $h
  else
    #echo "less than 10"
    return "$1"
  fi
}

echo "enter hour"
read hour
hr=$(issuehour "$hour")
echo "after calling function:-" $hr

3 个答案:

答案 0 :(得分:1)

bash中的return语句退出代码的同义词,范围为0 - 255.

"回声"用于返回值/输出函数的值。这应该由调用函数使用$( )捕获,类似于您使用过的hr=$(issuehour "$hour")

回到你的问题,没有echo语句,函数没有向调用函数返回任何值,这解释了为什么你没有得到所需的输出。但是,由于您使用了" return",这将被视为功能'的' 返回代码。要验证这一点,请尝试:

function issuehour()
{
  issue_hour="$1";

  if [[ $issue_hour -lt 10 ]]
  then
    h="0"$issue_hour
    return $h
  else
    #echo "less than 10"
    return "$1"
  fi
}

echo "enter hour"
read hour
hr=$(issuehour "$hour")
echo $?

这将得到您正在寻找的相同结果。

P.S:最好遵循使用" echo"的传统方法。返回函数的值和"返回"声明"返回代码"

答案 1 :(得分:0)

只需将printf0填充一起使用:

printf "%02d\n" 1
01
printf "%02d\n" 2
02
printf "%02d\n" 9
09
printf "%02d\n" 10
10

答案 2 :(得分:0)

您可以使用以下代码。

issuehour()
{
  issue_hour="$1";

  if [ $issue_hour -lt 10 ] ;then
    h="0"$issue_hour
    echo $h
  else
    #echo "less than 10"
    echo "$1"
  fi
}

echo "enter hour"
read hour
hr=$(issuehour "$hour")
echo "after calling function:-" $hr

return命令将返回函数的退出状态,而不是使用echo命令。

[root@server1 tmp]# bash new
enter hour
10
after calling function:- 10
[root@server1 tmp]# bash new
enter hour
1
after calling function:- 01