kma*_*729 4 bash environment-variables
前几天我遇到一个命令
AWS_ACCESS_KEY="foo" AWS_SECRET_KEY="bar" aws list iam
Run Code Online (Sandbox Code Playgroud)
我看到在命令之前设置变量会在命令的环境中添加这些变量:
#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
Run Code Online (Sandbox Code Playgroud)
我试图使用这个技巧根据今天的日期动态创建一个新目录:
$ dname=$(date +%d_%m_%y) mkdir ${dname} && cd ${dname}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
mkdir: missing operand
Try 'mkdir --help' for more information.
Run Code Online (Sandbox Code Playgroud)
即dname=$(date +%d_%m_%y) echo $dname返回空!
我究竟做错了什么?如何在 bash 的同一行动态创建和使用变量?
Shell 在运行里面的命令之前会替换你的变量$()。您可以使用&&它来让它为您工作:
dname=$(date +%d_%m_%y) && mkdir ${dname} && cd ${dname}
Run Code Online (Sandbox Code Playgroud)
或者,当然:
dname=$(date +%d_%m_%y); mkdir ${dname} && cd ${dname}
Run Code Online (Sandbox Code Playgroud)
但是,如果要获取内部的环境变量,则dname可以使用。mkdir
假设我们有一个脚本test.sh,里面只有一条语句echo $dname。然后:
dname=$(date +%d_%m_%y) ./test.sh
Run Code Online (Sandbox Code Playgroud)
会产生:
07_03_17
Run Code Online (Sandbox Code Playgroud)
aws这与您的命令行的工作方式一致。
类似的帖子:
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |