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,它描述了正确的方法