BASH脚本基础:环境变量PS4介绍

在这里插入图片描述
这篇文章介绍一下Bash中的环境变量PS4。

PS4 是什么

PS4 是Prompt String 4的缩写,它是Linux/Unix下的一个用于控制脚本调试显示信息的环境变量。

Bash脚本的语法检查与调试

关于Bash脚本的语法检查与调试的介绍可以参看:

示例代码

本文使用如下示例代码对PS4的使用进行说明:

liumiaocn:~ liumiao$ cat test_syntax.sh 
#!/bin/bash

GREETINGS=$1
CURRENT_DIR=`pwd`

if [ _"HELLO" = _"${GREETINGS}" ]; then
  echo "liumiao, current dir is : ${CURRENT_DIR}"
fi
liumiaocn:~ liumiao$ 

PS4使用示例:缺省设定下的sh -x

PS4缺省为+,这种状态下使用sh -x进行调试,结果显示如下所示:

liumiaocn:~ liumiao$ echo $PS4
+
liumiaocn:~ liumiao$ sh -x test_syntax.sh 
+ GREETINGS=
++ pwd
+ CURRENT_DIR=/Users/liumiao
+ '[' _HELLO = _ ']'
liumiaocn:~ liumiao$

注意:pwd所在的行,由于是展开的命令,所以有两个+

PS4使用示例:自定义显示信息Debug Info

如果设定PS4=Debug Info,结果显示如下所示:

liumiaocn:~ liumiao$ export PS4="Debug Info:"
liumiaocn:~ liumiao$ sh -x test_syntax.sh 
Debug Info:GREETINGS=
DDebug Info:pwd
Debug Info:CURRENT_DIR=/Users/liumiao
Debug Info:'[' _HELLO = _ ']'
liumiaocn:~ liumiao$

可以看到pwd命令展开之处,提示信息为DDebug Info:,这是因为第一个字符会根据层次进行重复,所以建议第一个字符为+或者-这类型的字符,比如:

liumiaocn:~ liumiao$ export PS4="+Debug Info: "
liumiaocn:~ liumiao$ sh -x test_syntax.sh 
+Debug Info: GREETINGS=
++Debug Info: pwd
+Debug Info: CURRENT_DIR=/Users/liumiao
+Debug Info: '[' _HELLO = _ ']'
liumiaocn:~ liumiao$

PS4使用示例:显示行号和函数名称

修改一下此处的示例脚本,修改后如下所示:

liumiaocn:~ liumiao$ cat test_syntax.sh |awk '{printf("%s  %s\n",NR,$0)}'
1  #!/bin/bash
2  
3  GREETINGS=$1
4  CURRENT_DIR=`pwd`
5  
6  greetings() {
7    if [ _"HELLO" = _"${GREETINGS}" ]; then
8      echo "liumiao, current dir is : ${CURRENT_DIR}"
9    fi
10  }
11  
12  greetings
liumiaocn:~ liumiao$

使用PS4结合内建的环境变量可以显示行号和函数名称等,示例如下所示:

liumiaocn:~ liumiao$ export PS4='+$LINENO: {${FUNCNAME[0]}} '
liumiaocn:~ liumiao$ sh -x test_syntax.sh 
+3: {} GREETINGS=
++4: {} pwd
+4: {} CURRENT_DIR=/Users/liumiao
+12: {} greetings
+7: {greetings} '[' _HELLO = _ ']'
liumiaocn:~ liumiao$ 
发布了1039 篇原创文章 · 获赞 1291 · 访问量 398万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104112885