Macos 如何在OS/X中将shell变量设置为求值结果

Macos 如何在OS/X中将shell变量设置为求值结果,macos,bash,Macos,Bash,在Linux Bash中,我可以执行以下操作: $ export CP=$(cat classpath.txt) 如果我们使用“cat类路径”,我们会看到很长的输出(这就是为什么我不在这里复制) 但是,在OS/X中,相同的命令会导致CP为空。该命令的OS/X等价物是什么 2:21:59/mllib $ls -l classpath -rw-r--r-- 1 steve staff 13162 Oct 28 12:19 classpath 12:26:46/mllib $export CP

在Linux Bash中,我可以执行以下操作:

$ export CP=$(cat classpath.txt)
如果我们使用“cat类路径”,我们会看到很长的输出(这就是为什么我不在这里复制)

但是,在OS/X中,相同的命令会导致CP为空。该命令的OS/X等价物是什么

2:21:59/mllib $ls -l classpath
-rw-r--r--  1 steve  staff  13162 Oct 28 12:19 classpath
12:26:46/mllib $export CP=$(cat classpath)
12:26:54/mllib $echo $CP

12:26:59/mllib $export CP=`cat classpath`
12:27:03/mllib $echo $CP

问题是在大型类路径文件中有一个带有星号的条目:

/shared/libs/*   
通过删除星号条目,评估工作正常

下一步是了解如何转义星号,以便使用完整/正确的类路径

更新从@chepner的评论中,我尝试删除shopt-s nullglob。那就是罪魁祸首

12:54:38/mllib $shopt -u nullglob
12:54:45/mllib $vi classpath
12:54:53/mllib $export CP="$(cat classpath)"
12:55:00/mllib $echo $CP
/shared/scala/lib/*:/shared/mllib/mllib/target/scala-2.10/classes:
另一次更新需要引用$CP的输出。我在assignmnt端加了引号,但没有使用


e、 echo“$CP”确实有效。

问题是在大型类路径文件中有一个带有星号的条目:

/shared/libs/*   
通过删除星号条目,评估工作正常

下一步是了解如何转义星号,以便使用完整/正确的类路径

更新从@chepner的评论中,我尝试删除shopt-s nullglob。那就是罪魁祸首

12:54:38/mllib $shopt -u nullglob
12:54:45/mllib $vi classpath
12:54:53/mllib $export CP="$(cat classpath)"
12:55:00/mllib $echo $CP
/shared/scala/lib/*:/shared/mllib/mllib/target/scala-2.10/classes:
另一次更新需要引用$CP的输出。我在assignmnt端加了引号,但没有使用


e、 echo“$CP”确实有效。

问题是在大型类路径文件中有一个带有星号的条目:

/shared/libs/*   
通过删除星号条目,评估工作正常

下一步是了解如何转义星号,以便使用完整/正确的类路径

更新从@chepner的评论中,我尝试删除shopt-s nullglob。那就是罪魁祸首

12:54:38/mllib $shopt -u nullglob
12:54:45/mllib $vi classpath
12:54:53/mllib $export CP="$(cat classpath)"
12:55:00/mllib $echo $CP
/shared/scala/lib/*:/shared/mllib/mllib/target/scala-2.10/classes:
另一次更新需要引用$CP的输出。我在assignmnt端加了引号,但没有使用


e、 echo“$CP”确实有效。

问题是在大型类路径文件中有一个带有星号的条目:

/shared/libs/*   
通过删除星号条目,评估工作正常

下一步是了解如何转义星号,以便使用完整/正确的类路径

更新从@chepner的评论中,我尝试删除shopt-s nullglob。那就是罪魁祸首

12:54:38/mllib $shopt -u nullglob
12:54:45/mllib $vi classpath
12:54:53/mllib $export CP="$(cat classpath)"
12:55:00/mllib $echo $CP
/shared/scala/lib/*:/shared/mllib/mllib/target/scala-2.10/classes:
另一次更新需要引用$CP的输出。我在assignmnt端加了引号,但没有使用


e、 echo“$CP”确实有效。

您总是希望引用参数扩展。在这种情况下,

CP=$(cat classpath)
导致
CP
的值包含
*
。由于您有
shopt-s nullglob
,这会导致不匹配的shell模式扩展为空字符串,而不是按字面意义处理,因此命令

echo $CP
生成空字符串,因为
CP
的值进行了路径名扩展,但与任何文件都不匹配。如果你引用了它:

echo "$CP"
它将输出路径,因为引用的扩展不会进行路径名扩展


或者,使用关闭
nullglob

shopt -u nullglob

使不匹配的模式被逐字处理,以便
echo$CP
将生成不匹配的模式作为输出。我不认为这是一个解决方案,因为它只是“工作”,当模式不匹配任何东西。最好正确引用参数展开式。

您总是希望引用参数展开式。在这种情况下,

CP=$(cat classpath)
导致
CP
的值包含
*
。由于您有
shopt-s nullglob
,这会导致不匹配的shell模式扩展为空字符串,而不是按字面意义处理,因此命令

echo $CP
生成空字符串,因为
CP
的值进行了路径名扩展,但与任何文件都不匹配。如果你引用了它:

echo "$CP"
它将输出路径,因为引用的扩展不会进行路径名扩展


或者,使用关闭
nullglob

shopt -u nullglob

使不匹配的模式被逐字处理,以便
echo$CP
将生成不匹配的模式作为输出。我不认为这是一个解决方案,因为它只是“工作”,当模式不匹配任何东西。最好正确引用参数展开式。

您总是希望引用参数展开式。在这种情况下,

CP=$(cat classpath)
导致
CP
的值包含
*
。由于您有
shopt-s nullglob
,这会导致不匹配的shell模式扩展为空字符串,而不是按字面意义处理,因此命令

echo $CP
生成空字符串,因为
CP
的值进行了路径名扩展,但与任何文件都不匹配。如果你引用了它:

echo "$CP"
它将输出路径,因为引用的扩展不会进行路径名扩展


或者,使用关闭
nullglob

shopt -u nullglob

使不匹配的模式被逐字处理,以便
echo$CP
将生成不匹配的模式作为输出。我不认为这是一个解决方案,因为它只是“工作”,当模式不匹配任何东西。最好正确引用参数展开式。

您总是希望引用参数展开式。在这种情况下,

CP=$(cat classpath)
导致
CP
的值包含
*
。由于您有
shopt-s nullglob
,这会导致不匹配的shell模式扩展为空字符串,而不是按字面意义处理,因此命令

echo $CP
生成空字符串,因为
CP
的值进行了路径名扩展,但与任何文件都不匹配。如果你引用了它:

echo "$CP"
它将输出路径,因为引用的扩展不会进行路径名扩展


交替