0

我在 Windows 7 64Bit 中安装了 GitforWindows 2.20.1。

现在正如我在问题中所说,多变量赋值语法并不总是有效,特别是当要分配的值是命令的输出时,即:

read -r a b c <<< $(echo 1 2 3) ; echo "$a|$b|$c"

有效,但这些没有:

read -r SCRIPTDIR MAGE2ROOT <<< $(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
## OR ##
read -r -d "\n" SCRIPTDIR MAGE2ROOT <<< $(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

因为如果我在此之后打印输出,例如:

echo $SCRIPTDIR && echo $MAGE2ROOT && exit

它只打印一次路径。为什么?我们怎样才能让它发挥作用?

需要任何帮助/指导。

4

1 回答 1

0

read不做你想做的事。如果它没有读取与要分配的变量一样多的“单词”,它只会将额外的变量留空。在这种情况下,它只得到一个单词(脚本目录的路径),但它有两个要分配的变量(SCRIPTDIRMAGE2ROOT),所以它设置SCRIPTDIR为路径,并MAGE2ROOT留空。尝试您的第一个示例,但没有提供足够的值来填充所有变量:

$ read -r a b c <<< $(echo 1 2 3) ; echo "$a|$b|$c"
1|2|3
$ read -r a b c <<< $(echo 1 2) ; echo "$a|$b|$c"
1|2|
$ read -r a b c <<< $(echo 1) ; echo "$a|$b|$c"
1||

幸运的是,这很容易解决(正如@OlliK 所说)MAGE2ROOT="$SCRIPTDIR"。实际上,使用根本没有意义read,只需使用简单的赋值:

SCRIPTDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
MAGE2ROOT="$SCRIPTDIR"
于 2019-02-07T17:56:43.520 回答