我已经开始在我的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
变量中。我在这里做错了什么?
答案 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一样。