在巴斯,你可以看到
set --help
执行
-x打印命令及其参数。
下面是测试代码:
# 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
文件中每一行开头的+符号数的含义是什么?这是很明显的,但我想避免误解。
此外,是否可以出现一个单一的+标志?如果是的话,它的意义是什么?
发布于 2022-09-23 15:31:30
+数表示子外壳嵌套深度。
注意,整个test.sh脚本在子subshell中运行,因为它不是以#!/bin/bash开头的。这必须位于脚本的第一行,但它位于第二行,因为在包含脚本的echo参数的开头有一个换行符。
当脚本以这种方式运行时,由子shell中的原始shell执行,大致如下
( source test.sh )把它改成
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并且在脚本中运行的顶级命令将只有一个+。
例如,命令
n=$(echo "a" | wc -c)产生输出
++ echo a
++ wc -c
+ n=' 2'echo a和wc -c在为命令替换创建的子shell中执行,因此它们得到两个+,而n=<result>则在原始shell中使用单个+执行。
发布于 2022-09-23 15:09:32
来自man bash
-x
展开每个简单的命令后,对于命令、case命令、select命令或命令的算术,显示PS4的扩展值,然后显示该命令及其扩展参数或相关的word列表。
那么PS4在这里是什么?
PS4
此参数的值将与PS1一起展开,并在执行跟踪过程中每个命令bash显示之前打印该值。PS4的扩展值的第一个字符在必要时被多次复制,以指示多个级别的间接。默认情况是+。
据我所知,“间接”的含义没有得到进一步的解释.
https://stackoverflow.com/questions/73829702
复制相似问题