2016-04-11 2 views
0

Ich möchte alle Tage der Woche en Englisch und Französisch (siehe das Beispielbild unten) auflisten, aber ich finde mich selbst schreiben einige komplexe Syntax für eine sogar einfache Problem.Entscheidung für eine sauberere Lösung zur Verwendung von Set und Shift

Gibt es eine sauberere und bessere Lösung für diese Situation?

hier ist meine Bash-Skript

#!/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 

hier ist die Ausgabe des Skripts:

sample output

+0

vielleicht ist es nicht perfekt, aber es sieht ziemlich klein, sauber und verständlich zu mir. Es ist nichts falsch mit diesem Code, außerdem ist die Aufgabe, Zeug aus zwei Listen zu drucken, sehr einfach. Es lohnt sich also meiner Meinung nach nicht, Zeit für eine abgeschlossene Aufgabe von geringem Interesse zu verlieren. Mach weiter :) – JoulinRouge

+0

das ist genau das, was ich versuche @JoulinRouge – marsouf

Antwort

1

1) POSIX, keine bash Ismen:

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 

kein seq benötigt wird, wird eine Liste aufgeschlüsselt direkt über für und ein In-Loop-lesen die andere Liste wird - Rohre für Schleifen nur funktionieren wie Rohre während Schleifen.

2) Sehr kurzes, mit BSD reshape util rs Daten transponieren:

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

ty für das erste Schnipsel, es war sehr hilfreich – marsouf

1

Für die englischen Namen nur:

#!/usr/bin/env bash 

weeks=(mon tue wed thu fri sat sun) 

for i in {0..6}; do 
    echo "${weeks[$i]}" 
done 

ich benutze ein Array, da es sauberer ist.

1

Ich bin mir nicht sicher, ob Sie ein einfacherer Weg wollen das Gleiche, oder wenn Sie Notwendigkeit zu tun/Verschiebung verwenden gesetzt ...

Da Sie bash verwenden, ich nutzt das nehmen würde bashisms und gehen mit:

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 
+0

einfach und prägnant, danke für den Schnipsel – marsouf

Verwandte Themen