我正在研究fast.ai课程(深入学习编码员)。他们的一个用于在AWS中设置实例的bash脚本具有我无法理解的这一行代码(尽管知道它的用途):
我很确定,这会在同一目录中调用另一个bash脚本。但是我想了解/澄清六件事:
Q1
为什么会有。在$(dirname“$ 0”)之前
Q2
“$ 0”和$ 0有什么区别,你是否强制将第一种情况下的输出转换为字符串?
Q3
我通过将它回显到我的命令行来检查dirname“$ 0”的作用。看起来它给出了shell的名称?所以在我的情况下(使用Cygwin并执行:echo "$0"
),它会在控制台上打印“-bash”。
Q4
dirname做什么?
Q5
$(dirname“$ 0”)的值是多少?
Q6
变量:$ region,$ ami和$ instanceType是否会转移到setup_instance.sh,为什么?
答案 0 :(得分:4)
.
是source
命令的原始名称。它在当前进程中执行shell脚本。
引用变量会将其扩展为单个单词,并防止对结果进行通配符扩展。大多数情况下,当你使用变量时,你应该引用变量,除非你特别需要单词拆分和通配。
在shell脚本中,$0
包含脚本的路径名。在交互式shell中,它包含shell的路径名。
它输出路径名的目录部分。 dirname foo/bar/baz
打印foo/bar
。
将答案结合到#3和#4 - 这是脚本路径名的目录部分。因此,这会在与此脚本相同的目录中查找setup_instance.sh
脚本。
是的,他们会,因为.
在分配了这些命令的同一个shell进程中执行setup_instance.sh
中的命令。