在给定的shell中,通常我会设置一个或多个变量,然后运行一个命令.最近我了解了将变量定义添加到命令的概念:
FOO=bar somecommand someargs
Run Code Online (Sandbox Code Playgroud)
这工作......有点儿.当你改变一个LC_*变量(它似乎影响命令而不是它的参数,例如'[az]'字符范围)或者输出到另一个命令时,它不起作用:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
Run Code Online (Sandbox Code Playgroud)
我可以在"FOO = bar"之前添加somecommand2,但是它可以添加不需要的重复,但它对根据变量解释的参数没有帮助(例如'[az]')
那么,在一条线上做这件事的好方法是什么?我正在考虑以下顺序:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
Run Code Online (Sandbox Code Playgroud)
编辑:我有很多好的答案!目标是保持一个单行,最好不使用"导出".使用bash调用的方法总体上是最好的,尽管带有"export"的括号版本更紧凑.使用重定向而不是管道的方法也很有趣.
Express应用程序生成器(位于此处)的入门页面表示$ DEBUG=myapp:* npm start
使用MacOS或Linux 启动服务器.
这很好,但是我无法理解这条线实际上在做什么.我猜想它会为变量分配一些东西DEBUG
,但在退出服务器后我跑了echo $DEBUG
,它什么都没打印.我猜:
这里有点关键,但我不清楚如何/为什么.
希望有人可以为我打破这个.
前几天我遇到一个命令
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 的同一行动态创建和使用变量?
我刚刚遇到了这个代码片段:
$ DEVELOPMENT=1 node dev-mode.js
Run Code Online (Sandbox Code Playgroud)
这一行运行 node.js 程序并设置环境变量DEVELOPMENT
。我不明白设置 env 变量的机制是什么?这是有效的语法:
$ [var1=value1 var2=value2] [process_name process_params] ?
Run Code Online (Sandbox Code Playgroud)