显示文件是否存在——如果我使用 1 个参数,它可以工作,但是当我使用多个时,它会显示错误

showing if files exist - if i use 1 argument it works but when i use multiple it shows an error

新手 bash

任何人都知道这个问题似乎很容易解决,但我自己就是想不通!

基本上,我正在执行的命令对用户输入的参数做了一些处理,这些参数是文件名[这是一个作业,所以我不能讨论内容]我们只是说它列出了例如文件

用户可以输入的文件数量没有限制 代码(有问题的主要部分)

if [ -e "$*" ]
then
    ls "$*"
    echo "your files are listed"
else
    echo "file does not exist"
exit 0
fi

基本上 if 语句由于某种原因不起作用

我想要它,以便用户可以输入任意数量的参数

并且 if 语句将检查所有参数(文件)是否存在

到目前为止,当我只输入 1 个参数时,它会检查它是否存在

但是当我输入超过 1 个时,它会弹出错误 "too many arguments" 以及它不存在的错误消息

我们将不胜感激:)

如果你觉得你会帮助我作弊,请不要担心主要代码没问题但它只是这个验证位!

test -e 期望 单个文件 成为下一个参数。 "$*",相比之下,将所有参数合并为一个名称——因此,如果您有名为 first file.txtsecond file.txt 的文件,[ -e "$*" ] 将查看单个文件是否存在类似 first file.txt second file.txt 的名称(名称中带有空格和两个 .txt 扩展名)。

for file in "$@"; do                      ## this could also be just "for file; do"
  if ! [ -e "$file" ]; then               ## note that we're checking one at a time
    echo "File $file does not exist" >&2
    exit 1
  fi
  ls "$file"  ## hopefully this is just for debugging
done

echo "Your files all exist" >&2
exit 0   ## typically unnecessary -- default exit status is that of the last command
         ## ...and echo is unlikely to fail.

请注意 ls should not be used programatically,即使您 确实 只想打印实际存在供人类使用的文件的名称(而不是 scripted/programmatic使用),使用所有存在的名称调用一次 ls 比每个文件调用一次更有效;然而,解决这个问题显然不在所问问题的范围内。