linux - 决定如何使用 set 和 shift 的更清洁的解决方案

标签 linux bash command-line

我想用英语和法语列出一周中的所有日子(请参见下面的示例图片),但我发现自己正在为一个甚至简单的问题编写一些复杂的语法。

对于这种情况是否有更清洁和更好的解决方案?

这是我的 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

这是脚本的输出:

sample output

最佳答案

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 逐项列出,循环内 read 获取另一个列表——管道到for 循环就像管道到 while 循环一样工作。

2) 非常简短,使用 BSD reshape util rs 转置数据:

echo -e $fr_weeks'\n'$en_weeks | rs -T

关于linux - 决定如何使用 set 和 shift 的更清洁的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36550722/

相关文章:

linux - 使用 grep 搜索包含 [insert text] 的行

linux - 如何列出目录中某个字符串出现次数超过 X 次的文件

regex - 如何在 unix bash 中使用正则表达式在文本中查找日期和 IP 地址

python - 有没有办法使用 argparse 模块输入以 '-' 符号开头的字符串作为命令行参数? (不使用标志)

javascript - 为命令行创建 JavaScript 应用程序

linux - 在命令行和 Xargs 中批量重命名文件

linux - 在 vim 中自动打开 NERDTree

MySQL 无法写入文件,权限被拒绝。 (错误 13)

linux - 在循环 bash 中等待

bash - 在新命令后获取 Bash 中的上一行?