这是做什么的? printf '\t%s\n' "$@"

这是做什么的? printf '\t%s\n' "$@"

我正在编写一个更大的 bash 脚本,并且我找到了这个代码片段来测试目录是否存在不区分大小写

现在,如果我现在有一个名为 subs 的目录,此脚本将打印路径,如果我有两个(或更多)目录,它也会打印这些路径。

但我真的不明白怎么做,因为只有 1 个打印函数,而且没有循环?

我想这与'\t%s\n' "$@"代码...有人可以向我解释一下吗? (试图理解)

dir=~/test1
shopt -s nullglob nocaseglob
set -- $dir/[s]ubs/
if [ "$#" -gt 0 ]; then
    echo 'There is at least one directory called "subs" (case ignored):'
    printf '\t%s\n' "$@"
fi

答案1

Shell printf 使用该格式的次数与它具有参数的次数一样多。所以它有一个内置循环。

如果字符串中有三个 % 字符串,则它将一次使用三个参数。最后一轮,如果需要,它会将一个或两个参数默认为空白/零。

“$@”扩展所有 $1、$2、... 当前参数以分隔带引号的字符串。

在打印格式中(第一个参数)

\t(转义的 t)是一个制表符,将缩进 8 个空格。

%s 获取下一个未使用的参数并将其作为字符串插入。

\n(转义的 n)是一个换行符,将使下一行在列下方开始。

man bash是一个显示所有内置命令的命令,包括几页有关 printf 的内容。

man -s 1 printf是一个命令,显示外部命令 /bin/printf 的作用。它与内置的 bash 非常相似(但不完全相同),但更容易找到。

相关内容