Frohe Golfer, alle zusammen!

35

Es ist Weihnachten, und hier ist eine Code-Golf-Herausforderung zum Feiern. Sie müssen ein Programm erstellen, um ein Geschenk auszudrucken. Insbesondere die Worte "Frohe Weihnachten". ABER es gibt einen Haken: Dieses Programm muss nur funktionieren, wenn es der 25. Dezember ist. Wenn der Code an einem anderen Tag ausgeführt wird, sollte das Programm abstürzen.

Das ist Code-Golf, also gewinnt die Antwort mit der geringsten Anzahl von Bytes.

Fröhliche Weihnachten!

Löwe
quelle
5
Ja das war ermmmmm. .. ja 25. Entschuldigung
Leo
3
Golfy Codemas ! :)
Luis Mendo
1
Nein, es muss ein Absturz sein. Sie können die Anwendung nicht beenden
Leo
2
@PhiNotPi Diese Herausforderungen sind unterschiedlich. Dies erfordert keinen Countdown und bedeutet nicht, auf die Ausgabe zu warten
Leo,

Antworten:

8

Pyke, 21 Bytes

.dↄґ6C65h*325q/Al

Probieren Sie es hier aus!

     C65h*        -   multiply the day by the (current month + 1)
          325q    -  ^ == 325
    6         /   - 6 / ^
.dↄґ              -  load "merry christmas"
               Al - ^.capwords()

Oder 18 Bytes nicht konkurrenzfähig.

.dↄґ6Cs6Y1q/Al

Genau das Gleiche mit Ausnahme dieses Abschnitts:

Cs6Y1q 
C      -    get_time()
 s6    -   add 1 week
   Y   -  get day of the year
    1q - ^ == 1

Probieren Sie es hier aus!

Blau
quelle
Dies schlägt fehl, wenn es 30. Oktober ist, nicht wahr?
Magic Octopus Urn
1
@carusocomputing 30 * (10+1)= 330 nicht 325
Blue
6

JavaScript, 55 53 46 Bytes

Hinweis: Dies wurde nur in Google Chrome getestet. Das Programm kann sich von Browser zu Browser (oder von Gerät zu Gerät) unterschiedlich verhalten.

2 Bytes gespart dank @ ConorO'Brien

7 Bytes gespart dank @ETHProductions

alert(/c 25/.test(Date())?"Merry Christmas":a)

Beendet mit, Uncaught ReferenceError: a is not definedwenn das Datum nicht ist Dec 25. Ich bin mir nicht sicher, ob dies als Absturz gilt

alert(/c 25/.test(Date())?"Merry Christmas":a)

Kritixi Lithos
quelle
Wie wäre es .slice(6,10)=="c 25"?
Conor O'Brien
@ ConorO'Brien Danke! Das ist schlau :)
Kritixi Lithos
@ETHproductions Ich kann mir keinen Tag oder Monat vorstellen, der endet c( Octkommt dem nahe, befriedigt aber immer noch nicht den regulären Ausdruck). Danke für den Tipp!
Kritixi Lithos
Das Ergebnis von Date()ist vollständig implementierungsabhängig. Ich gehe zum Beispiel davon aus, dass es mit der Sprache und dem Standort der Maschine variiert.
Oriol
@Oriol Dann werde ich den Browser in meiner Antwort angeben
Kritixi Lithos
5

Python 3, 66 63 Bytes

Dank der Ideen von JavaScript / ES-Antworten hier habe ich es geschafft, einige Bytes zu komprimieren. Indizieren Sie ein Wörterbuch - nicht vorhandene Schlüssel lösen a aus KeyError. Der folgende Code funktioniert in der lokalen Zeitzone

import time;print({1:'Merry Christmas'}['c 25'in time.ctime()])

Das Ausgabeformat für ctimeist nicht vom Gebietsschema abhängig - das Format lautet immer ~ 'Sun Dec 25 19:23:05 2016'. Da die 3-Buchstaben-Abkürzung erst im Dezember endet c, ist die Verwendung 'c 25'in time.ctime()hier sicher .


Vorherige Version:

Dies funktioniert in der UTC-Zeitzone. Für die lokale Zeitzone werden s/gm/local3 weitere Bytes benötigt. Bei Python 2 können printfür 65 Byte Klammern entfernt werden .

import time;print({(12,25):'Merry Christmas'}[time.gmtime()[1:3]])

Das Konstrukt wirft KeyErroran anderen Daten:

>>> import time;print({(1,1):'Happy New Year'}[time.gmtime()[1:3]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: (12, 25)
Antti Haapala
quelle
Stürzt dieser an anderen Tagen ab (soll es sein)?
Erresen
2
Ich kann dieses nicht zum Laufen bringen, da es dem Tupel als Schlüssel widerspricht. Probieren Sie es online aus! . Wenn Sie es in import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]Python 2 ändern und es als Python 2 bezeichnen, sind es immer noch 66 Bytes, und es stürzt mit einem KeyError an anderen Daten als dem 25. Dezember ab.
ElPedro
@ElPedro oops: D hätte sein sollen 1:3, ich habe meinen Testcode versehentlich kopiert
Antti Haapala
Habe das aufgegriffen, als ich deine gmtime()Idee für meine Antwort ausgeliehen habe.
Ich
5

PHP, 39 38 Bytes, nicht konkurrierend (stürzt nicht ab)

<?=date(md)-1225?"":"Merry Christmas";

oder

<?date(md)-1225?die:0?>Merry Christmas

oder

<?=["Merry Christmas"][date(md)-1225];
Titus
quelle
Kann jemand 4 Bytes abschlagen date(Lz)%1001-358? : D
Titus
3
Stürzt das ab?
Edc65
Sie können ""im ersten Code weglassen, wodurch Sie 2 Byte sparen. Wenn es keine verdammten Schaltjahre gäbe, könnten Sie 2 Byte mehr sparen, indem Sie mddurch zund 1225durch die Nummer des Tages des Jahres vom 25. Dezember ersetzen .
UTF-8
1
Eine Alternative: eval((date(md)^TQZZ).'"Merry Christmas";');(43 Bytes)
Ismael Miguel
1
@ UTF-8: Du hast recht. Ich benutze den Elvis meistens für boolesche Werte; und das würde drucken 1. Dies würde das Ergebnis der Berechnung ausgeben. und 0104-1225ist 1121.
Titus
4

Python 2 , 68 67 65 Bytes

-1 danke an @muddyfish

Vielen Dank an @AnttiHaapala für die Idee, die ein weiteres Paar gerettet hat.

import time;print['Merry Christmas'][(12,25)!=time.gmtime()[1:3]]

Probieren Sie es online!

Löst einen IndexError aus, wenn nicht am 25. Dezember.

Nicht konkurrierende Version für 59 Bytes, da sie nur für Nicht-Schaltjahre funktioniert (verwendet den Tag des Jahres, der in diesem Jahr bei 360 liegt, jedoch bei 361 in Schaltjahren)

import time;print['Merry Christmas'][360!=time.gmtime()[7]]
ElPedro
quelle
Können Sie ein Byte nicht speichern, indem Sie eine Liste anstelle eines Tupels verwenden?
Blue
@ Schlammfisch Danke, guter Fang.
ElPedro
Nizza, meine Idee war 2 zusätzliche Bytes : P
FlipTack
Vielen Dank. Das war auch meine 67-Byte-Version, bis ich die Antwort von @AnttiHaapala kommentierte und darüber nachdachte gmtime(), ein paar zu rasieren. Ich muss zugeben, ich wünschte, ich könnte mit der Idee des Jahres mehr anfangen.
ElPedro
Sie können 1 Byte speichern mit: time.ctime () [6:10]! = 'C 25'
Max
4

R, 52 61 58 Bytes

`if`(format(Sys.Date(),"%m%d")=="1225","Merry Christmas",)

Wenn das aktuelle Datum nicht der 25. Dezember ist, wird ein Fehler zurückgegeben, da kein drittes Argument übergeben wird if.

Bearbeiten: Ein dummer Fehler wurde behoben

Billywob
quelle
Entschuldigung für meinen kleinen Tippfehler. Ich wollte 25tg sagen
Leo
Dies funktioniert allerdings nur in diesem Jahr!
Erresen
@ Erresen Ah richtig, dummer Fehler. Jetzt behoben.
Billywob
4

Mein erstes Mal hier ... Begonnen mit der besten Sprache überhaupt für diesen Job:

Java, 200 188 Bytes (danke an @Daniel Gray), 186 Bytes, die "ln" aus dem Druck entfernen.

import java.util.*;public class a{public static void main(String[]r){Calendar c=Calendar.getInstance();if(!(c.get(2)==11&&c.get(5)==25)){int i=1/0;}System.out.print("Merry Christmas");}}

Probieren Sie es hier aus!

Bonifacio
quelle
1
Willkommen bei PPCG! Schöner erster Beitrag, auch wenn Java nicht der kürzeste ist.
26.
1
Sie können das Calendarfür ändern *und ein paar Bytes speichern. Sie könnten auch den Namen des argsParameters in der Hauptmethode verkürzen , denke ich ...
Daniel Gray
@ Daniel Gray, Sie haben absolut Recht, danke!
Bonifacio
1
Herzlich willkommen! Sie können 10 Bytes einsparen, wenn Sie "public class" durch "interface" ersetzen und den Modifikator public aus main entfernen, wodurch "interface a {static void main ..." erstellt wird. Dadurch wird jedoch verhindert, dass Compilejava ihn ausführen kann online.
Zavada

3

MATL , 34 33 Bytes

'Merry Christmas'IHh&Z'5U12h=?}Yl

Dies funktioniert in der aktuellen Version (19.7.0) der Sprache. Um den Fehler zu verursachen, nutzt der folgende Code die Tatsache aus, dass der Logarithmus einer Zeichenfolge einen Fehler ergibt (dies kann sich in zukünftigen Versionen ändern).

Probieren Sie es online!

Erläuterung

'Merry Christmas'  % Push this string
IHh                % Push 3, then 2, concatenate: gives array [3 2]
&Z'                % Get 3rd and 2nd outputs of clock vector: current day and month
5U12h              % Push 5, square, push 12, concatenate: gives [25 12]
=                  % Compare if corresponding entries are equal in the two arrays
?                  % If all entries are equal: do nothing
}                  % Else
  Yl               %   Logarithm. Gives an error when applied on a string
                   % End (implicit). Display (implicit)

3

QBIC , 48 Bytes

~left$$|(_D,5)=@12-25||?@Merry Christmas|\?a(12)

Erläuterung:

~             IF
left$$|(_D,5) the date string starts with
=@12-25|      the string "12-25"
|             THEN
[email protected]|     PRINT "Merry Christmas"
\             ELSE
?a(12)        Print the twelfth index of an undefined array. 
              Since there are only 11 elements in undefined arrays, this 
              results in an index-out-of-bounds error.    
The the IF statement is auto-closed by QBIC.

Dies setzt die amerikanische MM-DDDatumsnotation voraus . Dies wäre kürzer, wenn ich endlich eine Substring-Funktion in QBIC erstellen würde.


Was passiert an Tagen, die nicht Weihnachten sind? Stürzt es ab, wie es sein soll?
Erresen

@Erresen tut es jetzt.
Steenbergh

3

05AB1E ,32 21 Bytes

Dank der String-Komprimierung von Adnan wurden 11 Bytes eingespart :).

1žfže‚12D·>‚Q÷”ÞٌΔ×

Erläuterung

 žfže‚                Push [current month, current day]
      12D·>‚          Push [12, 25]
            Q         Push tmp = 1 if the two arrays are equal, tmp = 0 otherwise
1            ÷        Evaluate x = 1/tmp. If tmp = 0 a division by 0 exception is thrown
              ”ÞÙŒÎ”× Implicitly display "Merry Christmas" x times

Probieren Sie es online!

Ich habe zuerst das gemacht, was mir in den Sinn gekommen ist, damit es vielleicht bessere Ansätze für diesen gibt. Aber PPCG verdient auch in 05AB1E ein frohes Weihnachtsfest;).


Auch xist kurz für duplizieren und verdoppeln :).
Adnan

3

C # / CS-Skript 106 100 99 Bytes

99-Byte-Lösung

using System;int i;Console.WriteLine(DateTime.Now.ToString("dM")=="2512"?"Merry Christmas":i/0+"");

Probieren Sie es hier aus!

100-Byte-Lösung (bevorzugen Sie diese ... ein bisschen anders)

using System;int i;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":i/0+"");

Erklärt:

using System;
int i;

// if today plus 7 days is the first day of the year, then it's xmas!
Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1
    ? "Merry Christmas"

// otherwise divide i by 0
    : i/0+"");

DateTime.Now.AddDays(7).DayOfYear==1ist ein Byte kürzer als, DateTime.Now.ToString("ddMM")=="2512"aber 1 Byte länger alsDateTime.Now.ToString("dM")=="2512"


1
Sie können verwenden $"{DateTime.Now:dM}"=="2512". dMist nicht eindeutig, aber nicht für "2512".
Kobi

@Kobi Ich kann keine String-Interpolation für CS Script verwenden :(
Erresen

1
Sie können, wenn Sie LinqPad verwenden (z. B. $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""55 Bytes) =)
Kenneth K.

Warum int iund nicht gerecht 1/0?
NoOneIsHere

1
@ Erresen Ah, mein Fehler. Ich habe nicht gründlich genug getestet. Optimiert: $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)(59 Bytes)
Kenneth K.

2

C # / CS-Skript, 96 Bytes, größtenteils aus Erresen plagiiert

using System;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":1/0+"");

Löscht die int iDeklaration zugunsten einer festen Kodierung der Division. Ich würde dies als Kommentar hinterlassen, habe aber nicht den Ruf.


Willkommen bei PPCG! Schöner erster Beitrag! Mach dir keine Sorgen um den Kommentar / die Antwort, es ist nicht so wichtig.
25.

2

Bash + Unix-Dienstprogramme, 51 49 47 Bytes

((`date +%m%d`-1225))&&${};echo Merry Christmas

* Dank an @ KenY-N für den Hinweis, dass die Anführungszeichen im Echo entfernt werden können, und an @IporSircer für die Reduzierung der Bedingungsgröße um 2 Byte.


Das gibt mir einen bash: ${}: bad substitutionFehler. Sie können auch die Anführungszeichen von Merry Christmas löschen , um zwei Bytes zu sparen. Außerdem [ `date +%m%d` = 1225 ]&&echo Merry Christmasfunktioniert bei mir das, was meinen 45 Bytes entspricht .
Ken YN

1
@ KenY-N Der Fehler ist beabsichtigt: Das Programm soll an anderen Tagen als Weihnachten abstürzen. Vielen Dank, dass Sie erwähnt haben, dass die Anführungszeichen im Echo entfernt werden können. Das habe ich vermisst.
Mitchell Spector

Hoppla, ich habe diese Anforderung verpasst! Getestet durch Ändern der Datumszeichenfolge, und ich sehe jetzt, dass es nicht abstürzt. Löschte meine Antwort ... Aber ich habe eine Alternative, also lass es mich aktualisieren.
Ken YN

Versuchen Sie ersetzen ${}mit !-mir zu schlagen , indem ein Byte. Ich stimme dir zu, wenn du gewinnst.
Ken YN

1
@ KenY-N Danke, aber ich werde $ {} nicht in ändern! - da ich denke, dass Letzteres nur in der Befehlszeile korrekt funktioniert, nicht in einem Skript (es sei denn, Sie aktivieren die Ersetzung des Verlaufs, was zusätzliche Zeit in Anspruch nehmen würde) Zeichen).
Mitchell Spector
1

Groovy, 57 Bytes

print new Date().format("Md")=="1225"?"Merry Christmas":b

Abstürze an anderen Daten als dem 25.12. mit groovy.lang.MissingPropertyExceptionweil bist nicht definiert.

chrki
quelle
1

Gestapelt , 42 Bytes

Probieren Sie es hier aus!

('Merry Christmas')'MMDD'date'1225'=¬#out

Dies erzeugt ein Einzelelement-Array, das nämlich enthält 'Merry Christmas!'. Danach wird das Datum in eine Zeichenfolge mit dem Monat gefolgt vom Tag eingefügt. Es prüft auf Gleichheit mit '1225'(Weihnachten), kehrt es mit um ¬und holt dann das Mitglied aus dem vorhergehenden Array. Wenn es nicht Weihnachten ist, wird dies mit einem Indexfehler fehlschlagen. Andernfalls wird gedruckt Merry Christmas. (Ändern Sie das Datum in der Zeichenfolge, um zu sehen, wie es an anderen Tagen funktioniert.)

Conor O'Brien
quelle
1

Batch, 66 Bytes

@echo off
if %date:~0,5%==25/12 echo Merry Christmas&exit/b
if

Die nachfolgende Newline ist signifikant, da das Parsen der ifAnweisung fehlschlägt. Möglicherweise müssen Sie die Datumsprüfung an Ihr lokales Datumsformat anpassen.

Neil
quelle
1

Python 2, 69 77 75 oder 72 70 Bytes

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
else:1/0

Wenn es keine Rolle spielt, wenn es zu Weihnachten mit einem Fehler beendet wird, dann:

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
1/0

BEARBEITEN:

Vielen Dank an @ Flp.Tkc für den Hinweis, dass ich einen Fehler auslösen musste

-2 Bytes von @Max für Hinweise zum Entfernen von Doppelpunkten aus der strftime-Funktion

sonrad10
quelle
1
Es soll abstürzen, wenn es nicht Weihnachten ist, dies endet einfach normal.
FlipTack
Sie können 2 Bytes sparen, indem Sie die Doppelpunkte entfernen -> '% d% m' == '2512'
Max
@Max OK, danke für den Tipp. Ich hatte diese Funktion vorher noch nicht benutzt, also hatte ich nicht daran gedacht
sonrad10 26.12.16
Speichern Sie weitere 3 Bytes mit: time.ctime () [6:10] == 'c 25'
Max
1

CJam, 28

et[C25]#1="Merry Christmas"/

Probieren Sie es online aus

Erläuterung:

et                   push an array of current [year month day hour ...]
[C25]                push the array [12 25] (C=12)
#                    find the position of the 2nd array within the first one
1=                   compare it with 1, resulting in 1 for 1 and 0 otherwise
"Merry Christmas"/   split "Merry Christmas" into pieces of that length
                      (it crashes if the length is 0)
                     at the end, all the pieces are concatenated
                      and printed automatically
aditsu
quelle
0

C # .NET, 180 172 171 Bytes

8 Bytes gespart dank Kritixi Lithos

Dank Kritixi Lithos wieder 1 Byte gespart;)

namespace System{class P{static void Main(string[] args){var d=DateTime.Today;if(d.Day==25)if(d.Month>11){Console.Write("Merry Christmas!");return;}throw new Exception();}}}

Alternative, ungolfed Variante:

namespace System //In System, so we don't have to use system.
{
    class Program
    {
        static void Main(string[] args) //Main function.
        {
            var d = DateTime.Today; //Get Today.
            if (d.Day == 25) if (d.Month == 12) //Day has to be 25th, Month has to be 12nd.
                {
                    Console.Write("Merry Christmas!"); return; //Prints.
                }
            throw new NotChristmasException(); //Errors/Crashes the program.
        }
    }
    class NotChristmasException : Exception { } //Holiday exception, hooray!
}
devRicher
quelle
Können Sie dem Programm keinen kürzeren Klassennamen geben?
Kritixi Lithos
Sie können einige Bytes entfernen, indem Sie die "NotChristmasException" in eine kürzere ändern.
Leo
@FishProHD Das NotChristmasExceptiongibt es nur in der ungolfed Variante.
DevRicher
@KritixiLithos Danke, das hat sich geändert.
DevRicher
1
if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()Anmerkung kombiniert, wenn Anweisungen und Entfernen von Klammern um die Console.Writeund ersetzen returndurch else. Auch ändern var d=DateTime.NowSie können die Ausnahme werfen mit vielleicht args[-1];nach dem Umbenennen von Argumenten auf aso loswerden a[-1];(dies ist so nicht identisch mit Division durch Nullen an anderer Stelle verwendet)
pinkfloydx33
0

Mathematica, 46 Bytes

If[Today[[1,2;;]]=={12,25},"Merry Christmas!"]
JungHwan min
quelle
Nowspart 2 Bytes mehr alsToday
Kelly Lowder
Außerdem brauchst du einen Crash im Ergebnis False, also denke ich sowas Quit[]oder 1/0sollte ausreichen.
Kelly Lowder
0

Common Lisp, 140

(let((m(multiple-value-list(decode-universal-time(get-universal-time)))))(if(and(eq(nth 3 m)25)(eq(nth 4 m)12))(write"Merry Christmas")(c)))

Abstürze mit undefinierter Funktion, wenn das Datum nicht stimmt.

Harry
quelle
0

awk, 29 bytes (+ length ("Frohe Weihnachten"))

v=1225==strftime("%m%d")||1/0

Laufen es:

$ echo Merry xmas | awk 'v=1225==strftime("%m%d")||1/0'
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: division by zero attempted

Die Begrüßung der Saison wird an weitergeleitet awk. Gibt strftimebeispielsweise Monat + Tag zurück 1226und wenn es übereinstimmt, wird der 1225 $0Datensatz ausgegeben. Das Vergleichsergebnis 1225==1226wird in vvar abgelegt, das zum Teilen von 1 verwendet wird, wenn der Datumsvergleich fehlschlägt.

James Brown
quelle
0

Haskell, 116

Abstürze mit "Nicht erschöpfenden Mustern in Funktion f", wenn es nicht Weihnachten ist.

import Data.Time
f(_,12,25)="Merry Christmas"
main=getZonedTime>>=print.f.toGregorian.localDay.zonedTimeToLocalTime

Leider gibt es keine Funktion, mit der Sie die Uhrzeit sofort in einem nützlichen Format anzeigen können. Daher werden die Datumsformate größtenteils konvertiert.

Avery Glitch
quelle
0

C #, 122 104 Bytes

18 Bytes gespart, dank @raznagul

using System;i=>{if(DateTime.Now.AddDays(7).DayOfYear==1)Console.Write("Merry Christmas");else{i/=0;};};

Es addiert 7 Tage zum aktuellen Tag und prüft, ob es der erste Tag des Jahres ist. Wenn ja, zeigt es "Frohe Weihnachten" an, andernfalls dividiert es durch Null.

Horváth Dávid
quelle
Das returnist nicht nötig. Verwenden Sie ianstelle von ().
Raznagul
0

Ruby, 69 Bytes

if Time.now.strftime("%j")=="360";puts "Merry Christmas";else 0/0;end

Funktioniert in 2016. Unterscheidet nicht zwischen normalen und Schaltjahren, muss möglicherweise für Nicht-Schaltjahre angepasst werden.

dkudriavtsev
quelle
0

ForceLang, 180 Byte

set s datetime.toDateString datetime.now()
set t "Dec 25"
def c s.charAt i
def d t.charAt i
set i -1
label 1
set i 1+i
if i=6
 io.write "Merry Christmas!"
 exit()
if c=d
goto 1
z.z

(Erinnere dich daran datetime.toDateString Gebietsschema abhängig ist, sodass dies je nach Gebietsschema möglicherweise nicht funktioniert.)

SuperJedi224
quelle
0

C #, 90 Bytes

using System;Console.Write(new[]{"Merry Christmas"}[DateTime.Now.AddDays(7).DayOfYear-1]);

Löst eine IndexOutOfRangeException aus, wenn nicht Weihnachten ist.

Probieren Sie es hier aus!

Luc
quelle
0

Bash-Befehlszeile, 45 48 49 48 Bytes

date +%m%d|grep -q 1225&&echo Merry Christmas||!-
date +%m%d|grep -q 1225||!-;echo Merry Christmas

Ähnlich wie Mitchell Spector , aber die Verwendung grepim Silent - Modus für ein Spiel zu überprüfen, dann &&wird dafür sorgen , dass es druckt nur auf den Erfolg und die ||Ursachen es Geschichte mit zu sehen !-, was das gibt mir:

-bash: !-: event not found

Und es stoppt die Ausführung, wie !- ; echo foogezeigt wird. In der bashDokumentation heißt es, dass !-nder aktuelle Befehl minus angegeben nwird. Daher wird er möglicherweise so interpretiert !-0, dass eine identische (und nicht lokalisierte) Fehlermeldung angezeigt wird.

Ken YN
quelle
Gute Idee, aber das stürzt nicht an anderen Tagen als Weihnachten ab, wie es sein soll, oder?
Mitchell Spector
Es gibt jetzt einen Fehler bei einem Fehler.
Ken YN
1
Dadurch wird eine Fehlermeldung ausgegeben, die jedoch fortgesetzt wird. es stürzt eigentlich nicht ab. Wenn Sie das ersetzen. mit $ {} stürzt es dann eigentlich eher einfach ab, eine Fehlermeldung auszudrucken und los. Ich denke, Absturz erfordert, dass das Programm an diesem Punkt beendet wird. Sie können feststellen, dass Ihre nicht beendet wird, indem Sie ein zusätzliches "; echo x" am Ende einfügen und sehen, dass es ausgeführt wird. (Deshalb habe ich in meiner Antwort $ {} anstelle von. Verwendet.) Ich weiß nicht, ob Sie eine 1- oder 2-stellige Sequenz verwenden können, die einen tatsächlichen Absturz verursacht.
Mitchell Spector
@MitchellSpector: Ich habe eine 2-Zeichen-Sequenz gefunden!
Ken YN
Und jetzt zurück zu 48, indem ich die Logik umschalte, damit ich sie ;anstelle von verwenden kann ||.
Ken YN