Bash 回显特定模板中的文件名
我在一个文件夹中有多个以相同名称开头的文件,但也有其他文件。让我们假设他们从“情节”开始。我想在这样一个模板中回显名称Bash 回显特定模板中的文件名,bash,echo,filenames,Bash,Echo,Filenames,我在一个文件夹中有多个以相同名称开头的文件,但也有其他文件。让我们假设他们从“情节”开始。我想在这样一个模板中回显名称 "plot-abc";"plot-dcb";"plot-asd";... 其余的名字没有顺序。我试过了 for file in /home/user/*; do echo '"' echo ${file##*/} echo '";' done 但这是把引号放在开头和结尾。并且无法消除不相关的文件 如果我们能找到解决办法,我将不胜感激 提前感谢。printf允许您
"plot-abc";"plot-dcb";"plot-asd";...
其余的名字没有顺序。我试过了
for file in /home/user/*;
do
echo '"'
echo ${file##*/}
echo '";'
done
但这是把引号放在开头和结尾。并且无法消除不相关的文件
如果我们能找到解决办法,我将不胜感激
提前感谢。
printf
允许您提供一个模板,根据需要重复多次以处理所有参数:
#!/usr/bin/env bash
# ^^^^- important: not /bin/sh; bash is needed for array support
shopt -s nullglob ## if no files match the glob, return an empty list
files=( /home/user/plot-* ) ## store results in an array
# if that array is non-empty, then pass its contents as a list of arguments to printf
(( ${#files[@]} )) && { printf '"%s";' "${files[@]##*/}"; printf '\n'; }
printf
允许您提供一个模板,可以根据需要重复多次以处理所有参数:
#!/usr/bin/env bash
# ^^^^- important: not /bin/sh; bash is needed for array support
shopt -s nullglob ## if no files match the glob, return an empty list
files=( /home/user/plot-* ) ## store results in an array
# if that array is non-empty, then pass its contents as a list of arguments to printf
(( ${#files[@]} )) && { printf '"%s";' "${files[@]##*/}"; printf '\n'; }
另一方面,它自己建议在开发新代码时使用
printf
;请参阅应用程序用法和基本原理部分。除此之外,它本身建议在开发新代码时使用printf
;请参阅应用程序用法和基本原理部分。感谢您的帮助。这并没有改变什么。抱歉,我不太了解。/home/user/*
只是因为您的引用错误,并且在剥离目录名后重新扩展了glob。。。因此,当给定一个无效的目录名时,它会在当前目录中扩展glob;files=(/home/user/plot-*“$sampleType”*);printf'文件是:%s\n'${files[@]}'。请注意,在shell中的赋值中,=
周围不能有空格;应始终引用扩展;而且,printf
数据和格式字符串应该彼此独立。顺便说一句,如果您进行搜索,您可以找到关于所有这些问题的现有知识库问题——例如,请参阅感谢您的帮助。这并没有改变什么。抱歉,我不太了解。/home/user/*
只是因为您的引用错误,并且在剥离目录名后重新扩展了glob。。。因此,当给定一个无效的目录名时,它会在当前目录中扩展glob;files=(/home/user/plot-*“$sampleType”*);printf'文件是:%s\n'${files[@]}'。请注意,在shell中的赋值中,=
周围不能有空格;应始终引用扩展;而且,printf
数据和格式字符串应该彼此分开。顺便说一句,如果您进行搜索,您可能已经找到了关于所有这些问题的现有知识库问题——例如,请参见