Shell 如何输入带有空白的路径?

Shell 如何输入带有空白的路径?,shell,Shell,我有一个主文件,它使用(从主文件我做一个源文件)一个属性文件,其中的变量指向路径 属性文件如下所示: TMP_PATH=/$COMPANY/someProject/tmp OUTPUT_PATH=/$COMPANY/someProject/output SOME_PATH=/$COMPANY/someProject/some path NEW_VAR=/YourCompany/someProject/some path 问题是某些路径,我必须使用带空格的路径(我无法更改它) 我试图用引号避开

我有一个主文件,它使用(从主文件我做一个源文件)一个属性文件,其中的变量指向路径

属性文件如下所示:

TMP_PATH=/$COMPANY/someProject/tmp
OUTPUT_PATH=/$COMPANY/someProject/output
SOME_PATH=/$COMPANY/someProject/some path
NEW_VAR=/YourCompany/someProject/some path
问题是
某些路径
,我必须使用带空格的路径(我无法更改它)

我试图用引号避开空格,但到目前为止没有解决办法

我编辑了路径,单引号的问题是我在路径中使用了另一个变量
$COMPANY

SOME_PATH=/mnt/someProject/some\ path

应该可以工作

您可以在“空格”字符前面加一个\来转义它

使用以下三种变体之一:

SOME_PATH="/mnt/someProject/some path"
SOME_PATH='/mnt/someProject/some path'
SOME_PATH=/mnt/someProject/some\ path

如果文件仅包含参数指定,则可以使用以下循环来代替源文件:

# Instead of source file.txt
while IFS="=" read name value; do
    declare "$name=$value"
done < file.txt
#而不是source file.txt
而IFS=“=”读取名称值;做
声明“$name=$value”
完成

这样可以避免引用文件中的任何内容,而且更安全,因为您不会冒险执行
file.txt

中的任意代码。我知道您自己已经找到了解决方案。 问题有两个方面。在你的情况下,分配需要适当的报价

SOME_PATH="/$COMPANY/someProject/some path"
这是可能的解决办法之一

但在shell中,这些引号并没有存储在内存中, 因此,当您要使用此变量时,需要再次引用它,例如:

NEW_VAR="$SOME_PATH"
因为如果没有,空间将扩展到命令级别,如下所示:

TMP_PATH=/$COMPANY/someProject/tmp
OUTPUT_PATH=/$COMPANY/someProject/output
SOME_PATH=/$COMPANY/someProject/some path
NEW_VAR=/YourCompany/someProject/some path
这不是你想要的

有关更多信息,您可以查看我的文章

如果Ubuntu中的路径是“/home/ec2 user/Name of Directory”,请执行以下操作:

1) Java的build.properties文件:

build_path='/home/ec2-user/Name\\ of\\ Directory'
其中
~/
等于
/home/ec2 user

2) 詹金斯档案:

build_path=buildprops['build_path']
echo "Build path= ${build_path}"
sh "cd ${build_path}"

是的,我试着转义这个角色,但是在这种情况下,如果没有“路径”,我会得到“/mnt/someProject/some”,那么它可能需要对你的操作系统做些什么。标准bash控制台应该可以工作。您使用的是什么操作系统?您是否有机会引用过该路径?已解决。问题出在一个引用中,变量没有引号,这可能是一个解决方案。问题是,事情比分配要多。谢谢这确实应该被标记为正确答案。引用变量本身的细节似乎是让人困惑的主要原因(包括我!)帮助我的关键信息是,在定义变量时使用的引号并没有成为变量值的一部分,因此,在使用变量时必须再次引用。是的,但我已经有了\转义空格的方法。并不是说其他人错了。