shell脚本在调用变量时会增加空间

时间:2017-12-14 18:19:52

标签: python bash shell

我偶然发现了#!/bin/bash脚本的奇怪行为。

我得到了变量SD=/SOME_VALID_PATHSCRIPT=SOME_PYTHON_SCRIPT.py。我现在想在脚本中做的是eval python ${SD}/${SCRIPT}

结果看起来像python /SOME_VALID_PATH/ SOME_PYTHON_SCRIPT.py。注意路径和脚本名称之间的空格,当然不会执行此命令。

echo ${SD}提供/SOME_VALID_PATHecho ${SCRIPT}提供SOME_PYTHON_SCRIPT.py,无任何空格。

我(通常)可能做错的任何想法?

1 个答案:

答案 0 :(得分:0)

我不确定您为什么要按照您提到的方式尝试使用eval(如评论中所述,您的代码示例会有所帮助)。您提到的错误可能是因为eval将提供的字符串连接为其参数,因此您有责任确保命令语法正确。因此可能是python将路径(SD)和SCRIPT作为两个不同的参数(由空格分隔),因此无法执行可能是目录的路径。

例如,您可以将命令替换evalecho一起使用,以确保正确表示字符串。下面给出一个示例,其中我为路径和脚本名称定义了两个变量。脚本名称包含一个空格,因此正常的eval会引发错误。

$ echo $var1
/home/user/Documents/Temp
$ echo $var2
temp.py
$ echo  \"$var1/$var2\"
"/home/user/Documents/Temp/ temp.py"
$ cat "$(echo $var1/$var2)"
print "Hello World"
$ eval python $var1/$var2
/home/user/bin/python: can't find '__main__' module in '/home/user/Documents/Temp/'
$ eval python $(echo  \"$var1/$var2\")
Hello World

但这可能不是最好的做事方式。路径中应避免使用空格。