新手打击
任何人都知道这个问题似乎很容易解决,但我自己也搞不清楚了!
基本上我正在做的命令对用户输入的参数做了一些事情,这些参数是文件名[这是为了分配所以我不能讨论内容]让我们说它列出了文件,例如为了清酒
用户可以键入的文件数量没有限制 代码(有问题的主要原因)
if [ -e "$*" ]
then
ls "$*"
echo "your files are listed"
else
echo "file does not exist"
exit 0
fi
基本上if语句由于某种原因不起作用
我想要它,以便用户可以输入任意数量的参数
并且if语句将检查是否存在所有参数(文件)
到目前为止,当我输入1个参数时,它会检查它是否存在
但是当我输入的数量超过1时,它弹出错误“参数太多” 以及它不存在的错误消息
帮助将受到赞赏:)
如果你觉得你会帮我作弊不要担心主要代码是好的它可以工作,但它只是这个验证位!
答案 0 :(得分:1)
test -e
期望单个文件成为下一个参数。相比之下,"$*"
将您的所有参数合并为一个名称 - 因此,如果您有名为first file.txt
和second 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,即使你 想要仅打印实际存在供人类消费的文件的名称(与脚本/程序化使用相反),它会更多有效地使用所有存在的名称调用ls
一次,每个文件一次;然而,这并不是明确在所提问题的范围内。