为什么我的bash变量被执行了?

时间:2017-03-07 19:12:07

标签: bash macos

我已经开始在我的Mac上编写一个bash脚本(OS X Yosemite 10.10.5)。它必须是最愚蠢的问题,但我无法弄清楚发生了什么。该脚本基本上是:

#!/bin/bash
WORKING_DIR=$(mktemp -d)

我打算稍后使用WORKING_DIR变量作为参考。输出显示:

My-MacBook-Pro:myfolder me$ ./test.sh 
usage: mktemp [-d] [-q] [-t prefix] [-u] template ...
       mktemp [-d] [-q] [-u] -t prefix 

我不希望mktemp被执行,我希望将其存储在WORKING_DIR变量中。我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

这就是命令替换的作用:它立即运行附带的命令 ,并捕获输出供封闭表达式使用(这里,它使用它作为右侧的值)表达)。

如果要延迟执行,则需要定义一个函数:

working_dir () {
    mktemp -d
}

d1=$(working_dir)
d2=$(working_dir)
# etc

答案 1 :(得分:0)

您需要为mktemp提供一个参数,这是消息告诉您的内容。试试这个:

#!/bin/bash
WORKING_DIR=$(mktemp -dt foo)

根据手册页,您的使用应该正常,所以我怀疑您可能从其他地方收到此消息。

  

如果没有传递参数或只传递 -d 标志 mktemp 的行为就好像 -t tmp一样。