如果变量“fileName”包含空格,如何使这个bash脚本工作?

时间:2010-01-15 16:28:18

标签: linux bash scripting

#!/bin/bash -x

echo "Enter file name: "
read fileName
fileName=`pwd`"/$fileName"
if [ -f $fileName ]; then
    echo "file is present"
fi

即使我通过在开始和结束时添加引号来更改fileName的值..脚本仍然无效。

6 个答案:

答案 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