我在执行包含变量的命令时遇到问题,因此我尝试使用这个简单的示例重新创建它。
我想列出路径DIR
的内容,但由于路径中有space
,因此无效。
问题是路径/home/User Name/tarfolder
中的空间。如果路径中没有空格,这可以正常工作。
如何才能让路径中有空格的路径?
另外,在linux / unix的路径中使用空格是不好的做法。 我正在使用Windows 7机器上的cygwin,但我正在为我使用的linux服务器编写脚本。
SCRIPT:
#!/bin/bash
## trying to work on directories here that have spaces in there path
# get the current directory the script is in
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "DIR is equal to:"
echo $DIR
## want to be able to list the contents of the path $DIR that has a space in it
eval 'ls' $DIR
OUTPUT ::
User Name@WNZCL0276 ~/tarfolder
$ ./dir_path_with_space.sh
DIR is equal to:
/home/User Name/tarfolder
ls: cannot access Name/tarfolder: No such file or directory
/home/User
我知道我可以使用像这里的转义字符,但我不能在上面的脚本中使用它。
User Name@WNZCL0276 ~/tarfolder
$ ls /home/User\ Name/tarfolder/
backup.sh dir_path_with_space.sh folderToZip ReadMe.txt
答案 0 :(得分:2)
不要使用eval
。请使用引号。
dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ls "$dir"
按照惯例,dir
应该是小写的,因为它既不是环境变量也不是shell内置的;遵循此约定可避免命名空间冲突。
有关您在此处尝试执行的操作(就查找脚本的位置而言)的更多讨论,请参阅BashFAQ #28。有关使用变量构建命令的更大讨论(内容可以包含空格和其他任意内容),请参阅BashFAQ #50。有关为什么eval
不应被使用的讨论,除非绝对必要,请参阅BashFAQ #48。