命令

2017-03-07 52 views
1

前猛砸變量賦值一個前兩天我碰到一個命令命令

AWS_ACCESS_KEY="foo" AWS_SECRET_KEY="bar" aws list iam 

我看到一個命令之前設定的變量增加了這些變量在命令的環境來:

#make sure there is no environment variable "foo" 
$ echo $foo 

#mimic-ing above command 
$ foo=bar printenv | grep foo 
foo=bar 

#or trying from python environment 
$foo=bar python -c "import os; print(os.getenv('foo', None))" 
bar 

#foo is destroyed now 
$ echo $foo 
#<<NOTHING 

我試圖用這個技巧根據今天的日期動態地創建一個新的目錄:

$ dname=$(date +%d_%m_%y) mkdir ${dname} && cd ${dname} 

但我去t以下錯誤:

mkdir: missing operand 
Try 'mkdir --help' for more information. 

$dname=$(date +%d_%m_%y) echo $dname返回空!

我在做什麼錯?我如何動態創建和使用在bash的同一行上是可變的?

+2

參數來自當前的shell,而不是命令最終運行的環境。 – chepner

回答

1

在運行$()內的命令之前,Shell正在替換您的變量。您可以使用&&,使之爲你工作:

dname=$(date +%d_%m_%y) && mkdir ${dname} && cd ${dname} 

或者,當然:

dname=$(date +%d_%m_%y); mkdir ${dname} && cd ${dname} 

然而,dname將提供給mkdir如果它要搶裏面的環境變量。

假設我們有一個腳本test.sh,裏面有一條語句echo $dname。然後:

dname=$(date +%d_%m_%y) ./test.sh 

會產生:

07_03_17 

這是您的aws命令行是如何工作的一致性。


類似的帖子:

0

你缺少&&前下方的mkdir是完整的陳述,你的願望:

dname=$(date +%d_%m_%y) && mkdir ${dname} && cd ${dname}

此外,如果其n無需聲明dname你可以這樣做: mkdir $(date +%d_%m_%y) && cd ${dname}兩者都會給出相同的答案