Linux 查看是否存在名称中带有空格的目录/文件

Linux 查看是否存在名称中带有空格的目录/文件,linux,bash,ssh,space,test-command,Linux,Bash,Ssh,Space,Test Command,我想检查路径是文件还是目录。我知道这条路是存在的。只要路径中没有空格,下面的代码就可以工作。如何使这适用于带有空格的名称?我当前有一个文件名,无法检查它是否远程存在。代码如下: server=<serverip> path="/var/lib/Fingerprint log.log" if ssh root@$server test -d $path then echo "Directory" else echo "File" fi 服务器= path=“/var

我想检查路径是文件还是目录。我知道这条路是存在的。只要路径中没有空格,下面的代码就可以工作。如何使这适用于带有空格的名称?我当前有一个文件名,无法检查它是否远程存在。代码如下:

server=<serverip>
path="/var/lib/Fingerprint log.log"

if ssh root@$server test -d $path
then
    echo "Directory"
else
    echo "File"
fi
服务器=
path=“/var/lib/Fingerprint log.log”
如果ssh root@$server test-d$path
然后
回声“目录”
其他的
回显“文件”
fi
当我有一个带有空格的路径时,它不能说

测试:/var/lib/Fingerprint:应为二进制运算符

如果路径为/var/lib/Fingerprint log.log

path="/var/lib/Fingerprint log.log"
ssh root@$server test -d $path
简而言之,您应该像这样运行ssh:

ssh root@$server test -d "'$path'"
or
ssh root@$server "test -d '$path'"
双引号确保
$path
变量在本地系统上展开,并且单引号传递到远程系统。单引号确保
$path
的值在远程系统上仍被视为单个命令行参数

这是由于ssh如何处理在其命令行上指定的远程命令。首先,它将所有相关的命令行参数连接到一个空格分隔的字符串中。然后它将该字符串发送到远程系统,在那里它作为shell命令运行

例如:

$ dne='/var/does not exist'
$ ssh localhost ls $dne
ls: cannot access /var/does: No such file or directory
ls: cannot access not: No such file or directory
ls: cannot access exist: No such file or directory

$ ssh localhost ls "$dne"
ls: cannot access /var/does: No such file or directory
ls: cannot access not: No such file or directory
ls: cannot access exist: No such file or directory

$ ssh localhost ls "'$dne'"
ls: cannot access /var/does not exist: No such file or directory

根据最上面的注释,您需要使用“${path}”而不是$path

引用你的变量。始终引用您的变量。@EtanReisner当注释提供足够的提示时,表示问题已解决的SO惯例是什么?@Dinesh:@Dinesh通常我会让别人告诉我将其作为答案来写。=)这个问题提得太多了,以至于我觉得没有必要再回答一个问题,我(无可否认)懒得去找一个好问题来把它标记为重复的问题。问题是,实际上没有一个明显的重复问题,而是数百个问题都有相同的答案。OP可以通过阅读
bash
tag的信息页面上的提示和建议来回答这个问题(不幸的是,对于不熟悉堆栈溢出的人来说,这并不容易找到)。