调试 shell 参数

调试 shell 参数

是否有类似的命令echo显示收到的参数?

例如echo "a b" c显示a b c

但我想看到类似的东西"a b" "c"

答案1

您可以使用printf,例如:

$ printf ">%s<\n" "a b" c
>a b<
>c<

或者使用您喜欢的任何分隔符,但请注意,它不会像set -x那样生成 shell 样式的带引号的输出。并且它总是至少打印一次格式字符串,因此printf ">%s<\n"没有其他参数会产生><.

或者在 Bash 中获取 shell 样式的带引号的输出:

$ printf "%q\n" "a b" c
a\ b
c

其缺点%q是它更喜欢反斜杠而不是引号,因此输出很难看并且比必要的更难阅读。

当然,您也可以创建一个外部脚本来执行此操作,但对于您的情况来说,它可能是一个过于繁重的解决方案:

$ cat args.sh
#/bin/bash
printf "%d args: " "$#"
for x do
    printf "%s " "${x@Q}"   # nicer output than printf %q
done
echo

$ ./args.sh "a b" c
2 args: 'a b' 'c' 

相关内容