Bash在函数后丢失了变量

时间:2017-11-08 10:32:15

标签: bash shell

我是一个简单的Bash脚本。

#!/bin/bash

function askExp
(
    read -ep "$1" -n "$2" -r "$3"
)
askExp "PHP? [Y/n]: " 1 php

echo $php

如何修改上面的脚本才能工作?在echo $php之后我没有得到任何结果。我需要使用bash函数,因为之后我会在函数内添加正则表达式验证。该函数将在脚本中多次使用。

1 个答案:

答案 0 :(得分:2)

shell运行子shell中(..)下的任何内容,特别是一旦shell终止,定义的变量将失去其范围。您需要将函数括在{..}中,其中包含bash shell中的复合语句,以确保其中的命令在相同的 shell中运行。

function askExp { read -ep "$1" -n "$2" -r "$3"; }

作为一个小实验,您可以观察

的输出
hw()(
  echo hello world from $BASHPID
)
hw 
echo $BASHPID

从同一个shell运行时。

hw(){
  echo hello world from $BASHPID
}
hw 
echo $BASHPID

原因是在前一种情况下,在(..)内创建的shell中设置的变量在本地shell中丢失。