首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当“设置-x”时,Bash中的stderr中+符号的个数是什么意思?

当“设置-x”时,Bash中的stderr中+符号的个数是什么意思?
EN

Stack Overflow用户
提问于 2022-09-23 15:03:17
回答 2查看 48关注 0票数 1

在巴斯,你可以看到

set --help

执行

-x打印命令及其参数。

下面是测试代码:

代码语言:javascript
复制
# make script
echo '
    #!/bin/bash
    set -x
    n=$(echo "a" | wc -c)
    for i in $(seq $n)
    do
        file=test_$i.txt
        eval "ls -l | head -$i"> $file
        rm $file
    done
' > test.sh
# execute
chmod +x test.sh
./test.sh 2> stderr
# check
cat stderr

输出

+++为I响应+++ wc -c ++ n=2 +++ seq 2 ++ in $(seq $n) ++ file=test_1.txt ++ eval 'ls -l head -1‘+++ ls -l +++ head -1 +++ ls -l +++ head,以$(seq )en21 eval 'ls ls en26# head -2 rm $n 28 en21$n 23#en23\en23’en24#ls 25 head-2 rm

文件中每一行开头的+符号数的含义是什么?这是很明显的,但我想避免误解。

此外,是否可以出现一个单一的+标志?如果是的话,它的意义是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-23 15:31:30

+数表示子外壳嵌套深度。

注意,整个test.sh脚本在子subshell中运行,因为它不是以#!/bin/bash开头的。这必须位于脚本的第一行,但它位于第二行,因为在包含脚本的echo参数的开头有一个换行符。

当脚本以这种方式运行时,由子shell中的原始shell执行,大致如下

代码语言:javascript
复制
( source test.sh )

把它改成

代码语言:javascript
复制
echo '#!/bin/bash
    set -x
    n=$(echo "a" | wc -c)
    for i in $(seq $n)
    do
        file=test_$i.txt
        eval "ls -l | head -$i"> $file
        rm $file
    done
' > test.sh

并且在脚本中运行的顶级命令将只有一个+

例如,命令

代码语言:javascript
复制
n=$(echo "a" | wc -c)

产生输出

代码语言:javascript
复制
++ echo a
++ wc -c
+ n='       2'

echo awc -c在为命令替换创建的子shell中执行,因此它们得到两个+,而n=<result>则在原始shell中使用单个+执行。

票数 2
EN

Stack Overflow用户

发布于 2022-09-23 15:09:32

来自man bash

-x

展开每个简单的命令后,对于命令、case命令、select命令或命令的算术,显示PS4的扩展值,然后显示该命令及其扩展参数或相关的word列表。

那么PS4在这里是什么?

PS4

此参数的值将与PS1一起展开,并在执行跟踪过程中每个命令bash显示之前打印该值。PS4的扩展值的第一个字符在必要时被多次复制,以指示多个级别的间接。默认情况是+

据我所知,“间接”的含义没有得到进一步的解释.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73829702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档