【问题标题】:If statement comparing variable to files in listIf语句将变量与列表中的文件进行比较
【发布时间】:2019-12-26 12:07:51
【问题描述】:

我正在使用终端模拟器。我有一个包含保存文件的文件夹,正在尝试确定输入的文本是否与列表中的任何文件匹配。

我使用ls 创建了一个名为saveFiles 的变量。仅显示带有.save 的文件并将其从输出中删除:

saveFiles=$(cd "${0%/*}"/save; ls *.save* | ls *.save*; cd "${0%/*}")
echo -n ">"
read -r "name"  

所以$saveFiles 等于:

Savegame1 savegame2 savegame3

我正在尝试创建一个 if 语句来测试输入的变量是否等于文件夹中的任何文件。

以下脚本有效,除非我键入文件末尾包含的字母。因此,如果其中一个文件称为 savegame,如果我输入 game 它会出现匹配,因为 game.save 包含在字符串中。

if [[ $saveFiles = *"$name".save* ]]
then
   scene=$(cat "save/$name".save)
fi

我需要找到一种方法来测试$saveFiles 中的任何字符串是否等于输入的变量$name

重申一下,文件夹中的文件:

Save1.save
Save2.save
...

Read `$name`

如果$name 匹配列表中的任何文件,则加载场景,否则重复。

我希望这不会令人困惑。请随时要求我进一步澄清。谢谢。

【问题讨论】:

  • 欢迎来到 StackOverflow!您可以使用重音字符`(例如code)更好地格式化问题中的程序代码,或者为多行代码块添加三重```

标签: linux bash terminal emulation


【解决方案1】:

也许我没有正确理解这个问题,但是您为什么不先请求文件名,然后使用该名称查询文件系统,例如

read name
if [[ -f "${name}.save" ]];
    echo "Found the file ${name}.save"
fi

【讨论】:

  • 问题是当我输入一个不在列表中的存档时,它会将游戏设置为不存在的文件名。我会看看这是否有效。
  • 这正是我所需要的。只是为了澄清。这个查询是如何工作的。 -f 是找到正确的。所以它是在询问文件夹中的文件是否与名称匹配?
  • 好的,我看到它的意思是搜索是否与文件名匹配。我很高兴事情就这么简单。这很好用。谢谢。
  • 太棒了 :-) 供参考:我刚刚修正了一个错字 - read name 而不是 read $name
  • 是的,我没看到。我还有一个问题。有没有办法使用相同的 -f 查询来测试列表中的文件是否包含 .save?试图做一个 if 语句返回“文件夹中没有保存”
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2016-12-20
  • 2011-01-06
  • 2013-11-10
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多