我在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
它只打印一次路径。为什么?以及如何使它起作用?
需要任何帮助/指导。
答案 0 :(得分:0)
read
并未执行您想要的操作。如果它读取的“单词”不如要分配的变量那么多,它将多余的变量留为空白。在这种情况下,它只得到一个单词(脚本目录的路径),但是要分配两个变量(SCRIPTDIR
和MAGE2ROOT
),因此它将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||
幸运的是,这很容易使用MAGE2ROOT="$SCRIPTDIR"
解决(如@OlliK所说)。实际上,根本没有使用read
的意义,只需使用简单的分配即可:
SCRIPTDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
MAGE2ROOT="$SCRIPTDIR"