#!/bin/bash -x
echo "Enter file name: "
read fileName
fileName=`pwd`"/$fileName"
if [ -f $fileName ]; then
echo "file is present"
fi
即使我通过在开始和结束时添加引号来更改fileName的值..脚本仍然无效。
答案 0 :(得分:5)
您必须同时使用if
中的引号:
if [ -f "$fileName" ]; then
答案 1 :(得分:4)
用双引号括起来对我有用:
#!/bin/bash -x
echo "Enter file name: "
read fileName
fileName=`pwd`"/$fileName"
if [ -f "$fileName" ]; then
echo "file is present"
fi
我相信这会照顾大多数特殊字符,包括引号本身。
答案 2 :(得分:3)
将if [ -f $fileName ]; then
更改为if -f "$fileName" ];
。否则,当文件包含空格时,-f操作将传递多个参数。如果您传入了一个名为“this file”的文件,shell会将其扩展为:
if [ -f this file ]; then
导致错误。
答案 3 :(得分:2)
您可以在执行-f测试时引用文件名。试试这个
#!/bin/bash -x
echo "Enter file name: "
read fileName
fileName=`pwd`/$fileName
if [ -f "$fileName" ]; then
echo "file is present"
fi
答案 4 :(得分:2)
即使用户输入了绝对路径,您也会在pwd前加上。试试这个:
case "$fileName" in
/*) ;; # okay
*) fileName=`pwd`/"$fileName"
esac
如果fileName不以/.
开头,那么这只会添加pwd此外,只有当fileName是常规文件时,您的if
测试才会成功。如果您希望它成功获取目录等,请使用-e
而不是-f
进行测试。
答案 5 :(得分:1)
带引号的环绕文件名:
if [ -f "$fileName" ]; then