【问题标题】:indicate any char in a string to do a comparison in shell指示字符串中的任何字符以在 shell 中进行比较
【发布时间】:2016-05-24 11:20:44
【问题描述】:

我还有一个在这个论坛找不到的小问题。

我有一个名为 Contacts 的目录,其中包含文件。每个文件都有相同的格式名称:name_secondname.ct

但在我的目录中,我可以拥有多个同名文件。 一个例子:

mario_winans.ct
mario_winans1.ct
mario_winans2.ct

我有一个 shell 脚本:

j=0
FILES=/home/accounts/studenti/id913usr/Scrivania/Contacts/*
nome_file="mario_winans"    
for f in $FILES ; do
    filename=${f##*/}
    if [[ "$nome_file(anything or any number).ct" == "$filename" ]] ; then
    (( j++ ))
    fi

done    
nome_file="mario_winans$j"
echo $nome_file

获取目录的路径,将名称保存到名为 nome_file 的变量中,遍历目录的文件,在每次迭代时获取文件名(将其放在名为 filename 的 var 中)并将 nome_file 与文件名进行比较。因为目录可以包含最后编号的相同名称的文件(例如:mario_winans2.ct)我只想比较名称,如果两个名称相等,我想增加一个计数器(在我的情况下为 j)并创建一个名称以 j 结尾的新变量。

在我的示例中,请记住,在我拥有的目录中

mario_winans.ct
mario_winans1.ct
mario_winans2.ct

变量名文件包含“mario_winans”

脚本将 nome_file 与 mario_winans.ct 比较,j 增加到 1,然后将 nome_file 与 mario_winans1.ct 比较,j 增加到 2,然后将 nome_file 与 mario_winans2.ct 比较,j 增加到 3

在循环外我修改了我的变量 nome_file ("mario_winans") 在末尾添加 j (nome_file="mario_winans$j")

这就是它的工作原理。 我的 if 条件有问题。部分(任何东西或任何数字)是问题所在。我只想比较两个名称而不是最后的数字,但我不知道如何在字符串中说出“任何东西或任何数字”

我希望已经清楚了。

【问题讨论】:

  • 您使用的是什么风格或正则表达式? javascript? c# ?

标签: regex string numbers compare conditional-statements


【解决方案1】:

您只想计算文件数?

DIR=/home/accounts/studenti/id913usr/Scrivania/Contacts/
nome_file="mario_winans"
shopt -s nullglob
files=( $DIR$nome_file*.ct )
shopt -u nullglob
j=${#files[*]}

【讨论】:

  • 我在你的脚本中添加了这段代码:echo $j,打印 j 我执行你的脚本,它给了我这个输出:{0files[*]}
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多