我有一个脚本,它登录到远程主机以拉取目录列表,以便稍后向用户显示选项。这一切都很完美,直到其中一些目录开始有空间。我已经尝试了几种语法,并且使用了这个命令,我现在处于我的系绳的末尾。原来的命令是这样的:使用包含命令空格的元素生成bash脚本数组
SERVERDIRS=($(sshpass -p $PASS ssh -oStrictHostKeyChecking=no [email protected]$SERVER ls -l --time-style="long-iso" $FROMFOLDER | egrep '^d' | awk '{print $8}'))
我首先改变了这种代码能够读取的空间是这样的:
SERVERDIRS=($(sshpass -p $PASS ssh -oStrictHostKeyChecking=no [email protected]$SERVER ls -l --time-style="long-iso" $FROMFOLDER | egrep '^d' | cut -d' ' -f8-))
但是这导致每个字被识别为一个变量。我尝试了很多方法来尝试解决这个问题,其中两个是:
SERVERDIRS=($(sshpass -p $PASS ssh -oStrictHostKeyChecking=no [email protected]$SERVER ls -d $FROMFOLDER* |rev| cut -d'/' -f1|rev|sed s/^/\"/g|sed s/$/\"/g))
SERVERDIRS=($(sshpass -p $PASS ssh -oStrictHostKeyChecking=no [email protected]$SERVER ls -d $FROMFOLDER* |rev| cut -d'/' -f1|rev|sed 's/ /\\ /g'))
SERVERDIRS=(`sshpass -p $PASS ssh -oStrictHostKeyChecking=no [email protected]$SERVER ls -d $FROMFOLDER* |rev| cut -d'/' -f1|rev|sed 's/ /\\ /g'`)
如何解决这些目录以正确分隔元素?
我不确定它是否可以正常工作,但是您可以尝试将$ IFS更改为空间以外的内容,以便空格不会导致脚本将空格分隔的字符串解析为单独的attibutes? [这可能有助于](http://stackoverflow.com/questions/4128235/bash-shell-scripting-what-is-the-exact-meaning-of-ifs-n) – andrew 2015-02-24 01:55:30
我会从最明显的事情开始,双引号您的变量,以防止空白问题。 “$ FROMFOLDER”应该做我猜的诡计。 – tvm 2015-02-24 01:55:33