Linux bash+;命令,其变量在路径中有空格

Linux bash+;命令,其变量在路径中有空格,linux,bash,Linux,Bash,我在执行一个有变量的命令时遇到了问题,所以我尝试在这里用这个简单的例子重新创建它 我想列出路径DIR的内容,但因为路径中有空格,所以它无法工作。 问题是路径/home/User Name/tarfolder中的空格。如果路径中没有空间,则此操作可以正常工作 我怎样才能使它对路径中有空间的路径起作用 另外,在linux/unix的路径中使用空格也不是一个好的做法。 我正在Windows7机器上开发cygwin,但我正在为我使用的linux服务器编写脚本 脚本: #!/bin/bash ## tr

我在执行一个有变量的命令时遇到了问题,所以我尝试在这里用这个简单的例子重新创建它

我想列出路径
DIR
的内容,但因为路径中有
空格
,所以它无法工作。 问题是路径
/home/User Name/tarfolder
中的空格。如果路径中没有空间,则此操作可以正常工作

我怎样才能使它对路径中有空间的路径起作用

另外,在linux/unix的路径中使用空格也不是一个好的做法。 我正在Windows7机器上开发cygwin,但我正在为我使用的linux服务器编写脚本

脚本:

#!/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   
输出::

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

不要使用
eval
。一定要用引号

dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ls "$dir"
按照惯例,
dir
应该是小写,因为它既不是环境变量,也不是shell内置;遵循此约定可以避免名称空间冲突



有关您在此处尝试执行的操作(在查找脚本位置方面)的更多讨论,请参阅。有关使用变量(包含可以包含空格和其他任意内容的内容)生成命令的详细讨论,请参见。有关除了绝对必要时不应使用
eval
的原因的讨论,请参阅。

不要使用
eval
。一定要用引号

dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ls "$dir"
按照惯例,
dir
应该是小写,因为它既不是环境变量,也不是shell内置;遵循此约定可以避免名称空间冲突



有关您在此处尝试执行的操作(在查找脚本位置方面)的更多讨论,请参阅。有关使用变量(包含可以包含空格和其他任意内容的内容)生成命令的详细讨论,请参见。有关除了绝对必要时不应使用
eval
的原因的讨论,请参阅。

不要使用
eval
。一定要用引号

dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ls "$dir"
按照惯例,
dir
应该是小写,因为它既不是环境变量,也不是shell内置;遵循此约定可以避免名称空间冲突



有关您在此处尝试执行的操作(在查找脚本位置方面)的更多讨论,请参阅。有关使用变量(包含可以包含空格和其他任意内容的内容)生成命令的详细讨论,请参见。有关除了绝对必要时不应使用
eval
的原因的讨论,请参阅。

不要使用
eval
。一定要用引号

dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ls "$dir"
按照惯例,
dir
应该是小写,因为它既不是环境变量,也不是shell内置;遵循此约定可以避免名称空间冲突



有关您在此处尝试执行的操作(在查找脚本位置方面)的更多讨论,请参阅。有关使用变量(包含可以包含空格和其他任意内容的内容)生成命令的详细讨论,请参见。有关除绝对必要时不应使用
eval
的原因的讨论,请参阅。

如果确实需要使用
eval
,可以运行
eval'ls“$DIR”
,但是。。。为什么?…顺便说一句,赋值右边的外部引号没有什么坏处,但它们也不是必需的:赋值隐式地防止字符串拆分和全局扩展。类似地,
echo“$DIR”
echo$DIR
更正确;如果您的目录名为
/path/to/***我的特殊目录名***/
,则后者的行为将是灾难性的(将
*
替换为当前命令所在目录中的文件列表)。如果确实需要使用
eval
,则可以运行
eval'ls“$DIR”
,但是。。。为什么?…顺便说一句,赋值右边的外部引号没有什么坏处,但它们也不是必需的:赋值隐式地防止字符串拆分和全局扩展。类似地,
echo“$DIR”
echo$DIR
更正确;如果您的目录名为
/path/to/***我的特殊目录名***/
,则后者的行为将是灾难性的(将
*
替换为当前命令所在目录中的文件列表)。如果确实需要使用
eval
,则可以运行
eval'ls“$DIR”
,但是。。。为什么?…顺便说一句,赋值右边的外部引号没有什么坏处,但它们也不是必需的:赋值隐式地防止字符串拆分和全局扩展。类似地,
echo“$DIR”
echo$DIR
更正确;如果您的目录名为
/path/to/***我的特殊目录名***/
,则后者的行为将是灾难性的(将
*
替换为当前命令所在目录中的文件列表)。如果确实需要使用
eval
,则可以运行
eval'ls“$DIR”
,但是。。。为什么?…顺便说一句,赋值右边的外部引号没有什么坏处,但它们也不是必需的:赋值隐式地防止字符串拆分和全局扩展。类似地,
echo“$DIR”
echo$DIR
更正确;如果您的目录名为
/path/to/***我的特殊目录名***/
,后者的行为将是灾难性的(将
*
替换为运行当前命令的目录中的文件列表)。也可能是我想做的一个简单的例子。我想做的是执行命令
command=“tar-cvf$arg1$arg2”
,然后执行命令
eval$command
@HattrickNZ,阅读BashFAQ#50,它描述了正确的方法