Bạn cần phải sử dụng $ (hoạt động vỏ) lệnh trong thực hiện. Nếu bạn sử dụng operation
, thì lệnh trình bao sẽ được đánh giá mỗi lần. Nếu bạn đang viết vào một tệp nhật ký, bạn không muốn tên tệp nhật ký thay đổi mỗi khi bạn truy cập nó trong một lệnh tạo đơn.
LOGPATH = logs
LOGFILE = $(LOGPATH)/$(shell date --iso=seconds)
test_logfile:
echo $(LOGFILE)
sleep 2s
echo $(LOGFILE)
Sản lượng này sẽ:
echo logs/2010-01-28T14:29:14-0800
logs/2010-01-28T14:29:14-0800
sleep 2s
echo logs/2010-01-28T14:29:14-0800
logs/2010-01-28T14:29:14-0800
sẽ không gây ra logfile này để được evaulated mọi lúc nó được sử dụng. Ví dụ: logfile = log/'date +"% y% m% d-% H:..% M:% S'' echo_logs: echo $ (logfile) 5s ngủ echo $ ($ LOGFILE) sẽ in: bản ghi âm/'date + '% y.% M.% D-% H:% M:% S'' nhật ký/10.01.28-14: 21: 08 sleep 5s nhật ký echo/'date + '% y.% m.% d-% H:% M:% S'' nhật ký/10.01.28-14: 21: 13 – Aaron
@Aaron: Bạn nói đúng; để tránh điều này có thể sử dụng gnu làm cho hàm 'shell' thay vì backticks:' LOGFILE = $ (LOGPATH) $ (shell date) ' – catwalk
Đồng ý, và cho đầy đủ: LOGFILE = $ (LOGPATH) $ (shell date + '% Y .% m.% d-% H:% M:% S '). Cũng hoạt động trên Solaris. – anisbet