假设我创建了一个文件~/myScript.sh
:
#!/bin/sh
for myVar; do
echo "Hi"
done
如果我在bash myScript
没有参数的情况下执行,我将一无所获,但如果我使用一个或多个参数执行它,我将根据这些变量的数量获得输出(该变量似乎使脚本依赖于传递的参数):
bash ~/myScript.sh arg0 arg1
基于未定义变量的 for 循环myVar
将适用于自身(对不起arg0
,arg1
如果这个措辞很糟糕),我会得到这个输出:
你好
你好
(每个参数一个“嗨”)。
我最初假设一个for
循环与一个参数一起工作,所以如果我有myVar_0
andmyVar_1
和arg0
and arg1
,那么myVar_0
将与arg_0
andmyVar_1
一起工作,arg1
但我进一步测试,我错了——所有for
循环都与所有参数一起工作:
#!/bin/sh
for myVar_0; do
echo "Hi"
done
for myVar_1; do
echo "Hello"
done
将返回bash myScript arg0 arg1
:
你好
你好
你好
你好
旁注:我假设如果想要“每 1 个 for 循环 1 个参数”,我只需要在本地范围内使用 Bash 函数。
我的问题
与 Bash 匹配的“所有 for 循环的所有参数”的名称是什么?
myVar
如果使用位置参数调用脚本,则不是未定义的。来自 man bash:但你不使用
$myVar
.Bash / POSIX shell 中的循环
for
类似于for
Python 中的循环:循环变量一个接一个地获取列出的值,并且循环体为每个值运行一次。所以这:
类似于
除了你不需要重复循环体。如果我们有一个数组变量
A
,for x in "${A[@]}"; do...
则遍历数组的值。类似地for x in "$@"; do...
循环位置参数,即命令行参数,因为它们是"$@"
扩展的。基本上for x; do
只是简写for x in "$@"; do
因此,这将打印所有命令行参数:
要通过索引直接访问参数,请使用
$1
第一个、$2
第二个参数等...