Chl*_*loe 2 command-line shell bash shell-script for
我想跑YII_ENV=prod yii kw/test十次。我试过
$ YII_ENV=prod for x in 1..10 do; yii kw/test done;
-bash: for: command not found
1304682651
Run Code Online (Sandbox Code Playgroud)
(好像跑过一次。)我也试过
$ for x in {1..10} do; YII_ENV=prod yii kw/test done;
-bash: syntax error near unexpected token `YII_ENV=prod'
Run Code Online (Sandbox Code Playgroud)
GNU bash,版本 4.3.39(2)-release (i686-pc-cygwin)
语法设置环境变量的命令的时间,只有当该命令是一个简单的命令(更准确地说,是一个外部命令,其作用类似于一个内建的工作-看我什么时候可以使用临时IFS现场分裂为更多细节)。您不能将它与复杂的命令(例如 for 循环)一起使用。VARIABLE=VALUE COMMAND
您的第一次尝试失败了,因为for它不是命令的第一个单词,所以它没有被解析为关键字,所以 bash 寻找一个调用的命令for而不是解析 for 循环。由于循环中的一个简单的语法错误,您的第二次尝试失败了:您需要在 之前使用分号或换行符do,因为否则do不会被识别为关键字。同样,您也需要在done.
for x in {1..10}; do YII_ENV=prod yii kw/test; done
Run Code Online (Sandbox Code Playgroud)
要在循环期间设置变量,如果您不关心覆盖先前的值,只需设置变量并在之后取消设置即可。
export YII_ENV=prod
for x in {1..10}; do yii kw/test; done
unset YII_ENV
Run Code Online (Sandbox Code Playgroud)
或者,在子 shell 中运行循环。只有当循环不应该修改 shell 的环境时,这才是一个选项。
(
export YII_ENV=prod
for x in {1..10}; do yii kw/test; done
)
Run Code Online (Sandbox Code Playgroud)
或者,在函数中运行循环,并将变量设为函数的局部变量。这需要 bash 或 ksh 或 zsh,它在普通 sh 中不起作用,但{...}无论如何语法都有这些要求。
call_yii () {
typeset YII_ENV=prod
export YII_ENV
for x in {1..10}; do yii kw/test; done
}
Run Code Online (Sandbox Code Playgroud)