bash - for循环的动态开始
问题描述
使用两个替代开始创建 bash for 循环。我想根据条件遍历范围内的所有数字或数组中的所有元素。以下非正统代码显示了示例:
#!/bin/bash
FROMVAL=1
TOVAL=5
VALARR=(1 3 5)
ISCONSEQ=1
if (( ISCONSEQ == 1 )); then
for (( counter=$FROMVAL; counter<=$TOVAL; counter++ ))
else
for counter in "${VALARR[@]}"
fi
do
echo $counter
done
显然,这不起作用,也不是很漂亮。有没有一种 bash 方法可以做到这一点,或者我应该创建两个 for 循环并根据内容只执行一个ISCONSEQ
?或者我应该for...in
对这两种情况都使用一个循环,然后简单地将我的序列值分配给数组?
此代码确实有效,但仅依赖于数组:
if (( ISCONSEQ == 1 )); then
VALARR=($(seq $FROMVAL 1 $TOVAL))
fi
for counter in "${VALARR[@]}"
do
echo $counter
done
解决方案
这是一个很好的函数用例。为 echo 创建函数并从每个 for 循环中调用它。它看起来像这样。
#!/bin/bash
FROMVAL=1
TOVAL=5
VALARR=(1 3 5)
ISCONSEQ=1
function dostuff() {
echo $*
}
if (( ISCONSEQ == 1 )); then
for (( counter=$FROMVAL; counter<=$TOVAL; counter++ ))
do
dostuff $counter
done
else
for counter in "${VALARR[@]}"
do
dostuff $counter
done
fi
推荐阅读
- python - Moving a dataframe column and changing column order
- php - 在 MySQL 中将 TABLE 101 重命名为 table101
- javascript - NODEJS: Results page is displayed before search is finished
- ubuntu - 没有找到 Python 应用程序 [digitalocean, ubuntu 1604, uWSGI, Nginx]
- flask - 结合 React 和 Flask 路由
- javascript - Why doesn't the link generate where indicates
- python - 列表推导中的 if 和 else 有问题。如果列表为空,我需要将列表值设为某个值
- sql - 嵌套查询未从 Oracle 11g 中的主查询中获取 Oracle 中的值
- android - Firebase 存储 getDownloadUrl() 方法无法解析
- html - 如何添加 Powered by: 在横幅广告上?