所以我正在处理一个脚本,其中一部分正在生成一个文件/目录数组,并打印出来供用户确认它们已被选中。我想以不同于文件的方式为目录着色,就像ls那样。
目前,这是我输出数据的方式:
printf ' %q\n' "${files[@]}"
这很有效。我知道如何使用颜色代码来改变printf颜色输出,我只是不知道如何使它成为条件。
为了使事情变得更容易,我使用-p标志来开始输出文件。所以所有目录都以/字符结尾。同样,我不仅完全确定如何编写这种特殊的条件逻辑,即使我知道必须有办法。
提前致谢。
答案 0 :(得分:0)
这应该这样做:
# input files
files=$(ls -p)
# array with formatted file names
formatted_files=()
# a few demo ANSI coloring codes
ANSI_RESET=$(tput sgr0)
ANSI_BOLD=$(tput bold)
ANSI_GREEN=$(tput setaf 2)
# iterate over input files, conditionally coloring
# and appending to formatted files array
for file in ${files[@]}; do
if [[ "$file" =~ /$ ]]; then
formatted_files+=("$ANSI_BOLD$file$ANSI_RESET")
else
formatted_files+=("$ANSI_GREEN$file$ANSI_RESET")
fi
done
# output (directories bold, files green)
printf ' %q\n' "${formatted_files[@]}"
当迭代文件时,我们在双括号测试表达式中使用bash正则表达式匹配运算符测试目录。如果文件以斜杠/$
结尾,则该文件是目录。
请注意,我们只使用bash internal / builtin命令进行迭代和测试,因此对于纯bash解决方案应该尽可能快。