我想列出英语和法语的一周中的所有日子(见下面的示例图片),但我发现自己正在为一个简单的问题编写一些复杂的语法。
对于这种情况,是否有更清洁,更好的解决方案?
这是我的bash脚本
#!/bin/bash
en_weeks='mon tue wed thu fri sat sun'
fr_weeks='lun mar mer jeu ven sam dim'
for i in $(seq 0 6)
do
set $en_weeks
shift $i
echo -n "$1 "
set $fr_weeks
shift $i
echo $1
done
这是脚本的输出:
答案 0 :(得分:1)
仅限英文名称:
#!/usr/bin/env bash
weeks=(mon tue wed thu fri sat sun)
for i in {0..6}; do
echo "${weeks[$i]}"
done
我正在使用数组,因为它更干净。
答案 1 :(得分:1)
我不确定您是否想要一种更简单的方法来做同样的事情,或者如果您需要来使用set / shift ...
由于你正在使用bash,我会利用这些基础知识并使用:
en_weeks=(mon tue wed thu fri sat sun)
fr_weeks=(lun mar mer jeu ven sam dim)
for i in {0..6}
do
echo ${en_weeks[$i]} ${fr_weeks[$i]}
done
答案 2 :(得分:1)
1)POSIX,没有 bash 主义:
en_weeks="mon tue wed thu fri sat sun"
fr_weeks="lun mar mer jeu ven sam dim"
echo $fr_weeks | tr ' ' '\n' | \
for i in $en_weeks ; do read x ; echo $i $x ; done
不需要 seq ,一个列表通过直接逐项列出,一个循环读取获取另一个列表 - 管道到 for 循环就像管道一样工作而循环。
2)非常简短,使用BSD reshape util rs 来转置数据:
echo -e $fr_weeks'\n'$en_weeks | rs -T