Chúc mừng Golfmas, mọi người!


35

Đó là Giáng sinh của mọi người, và đây là một thử thách chơi gôn mã để ăn mừng. Bạn cần làm một chương trình để in ra một món quà. Cụ thể, dòng chữ "Giáng sinh vui vẻ". NHƯNG, có một nhược điểm: chương trình này chỉ phải hoạt động nếu là ngày 25 tháng 12. Nếu mã được chạy vào bất kỳ ngày nào khác, thì chương trình sẽ bị sập.

Đây là Code-Golf, vì vậy câu trả lời có số byte ít nhất sẽ thắng.

Giáng sinh vui vẻ!


5
Vâng, đó là ermmmmm. .. vâng, xin lỗi lần thứ 25
Leo


3
Cody Golfy ! :)
Luis Mendo

1
Không, nó phải là một vụ tai nạn. Bạn không thể thoát khỏi ứng dụng
Leo

2
@PhiNotPi Những thách thức đó là khác nhau. Đây không phải là yêu cầu đếm ngược và không liên quan đến việc chờ đợi để đưa ra đầu ra
Leo

Câu trả lời:


8

Pyke, 21 byte

.dↄґ6C65h*325q/Al

Hãy thử nó ở đây!

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

Hoặc 18 byte không cạnh tranh.

.dↄґ6Cs6Y1q/Al

Chính xác như vậy ngoại trừ phần này:

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

Hãy thử nó ở đây!


Điều này thất bại nếu nó là ngày 30 tháng 10, phải không?
Bạch tuộc ma thuật Urn

1
@carusocomputing 30 * (10+1)= 330 chứ không phải 325
Blue

6

JavaScript, 55 53 46 byte

Lưu ý: điều này chỉ được thử nghiệm trong Google Chrome, chương trình có thể hoạt động khác nhau từ trình duyệt này sang trình duyệt khác (hoặc thiết bị đến thiết bị)

Lưu 2 byte nhờ @ ConorO'Brien

7 byte được lưu nhờ vào @ETH Productstions

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

Thoát với Uncaught ReferenceError: a is not definednếu ngày không Dec 25. Tôi không thực sự chắc chắn nếu điều này được tính là sụp đổ

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


Thế còn .slice(6,10)=="c 25"?
Conor O'Brien

@ ConorO'Brien Cảm ơn! Thật thông minh :)
Kritixi Lithos

@ETHproductions Tôi không thể nghĩ đến bất kỳ ngày hoặc tháng nào kết thúc c( Octđến gần, nhưng vẫn không thỏa mãn regex). Cảm ơn vì tiền hỗ trợ!
Kritixi Lithos

Kết quả Date()là hoàn toàn phụ thuộc thực hiện. Ví dụ, tôi hy vọng nó sẽ thay đổi theo ngôn ngữ và vị trí của máy.
Oriol

@Oriol Sau đó, tôi sẽ chỉ định trình duyệt trong câu trả lời của mình
Kritixi Lithos

5

Python 3, 66 63 byte

Nhờ các ý tưởng từ các câu trả lời JavaScript / ES ở đây, tôi đã quản lý để nén một số byte. Lập chỉ mục một từ điển - các khóa không tồn tại sẽ tăng a KeyError. Đoạn mã sau hoạt động theo múi giờ địa phương

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

Định dạng đầu ra ctimekhông phụ thuộc vào miền địa phương - định dạng luôn ~ 'Sun Dec 25 19:23:05 2016'. Vì chỉ trong tháng 12, chữ viết tắt 3 ký tự kết thúc c, nên sử dụng 'c 25'in time.ctime()ở đây là an toàn .


Phiên bản trước:

Điều này hoạt động trong múi giờ UTC. Đối với múi giờ địa phương, người ta cần s/gm/localthêm 3 byte. Đối với Python 2, người ta có thể loại bỏ dấu ngoặc đơn từ print65 byte.

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

Cấu trúc ném KeyErrorvào các ngày khác:

>>> 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)

Điều này có sụp đổ vào những ngày khác (nó được cho là)?
Erresen

2
Tôi không thể lấy cái này để chạy khi nó phản đối bộ dữ liệu như là một chìa khóa Hãy thử trực tuyến! . Nếu bạn đổi nó thành import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]và gắn nhãn Python 2, nó vẫn còn 66 byte và gặp sự cố với KeyError vào các ngày khác ngoài 25 tháng 12
ElPedro

@ElPedro oops: Đáng lẽ ra 1:3, tôi đã sao chép mã kiểm tra của mình một cách tình cờ
Antti Haapala

Chọn về điều đó khi tôi mượn gmtime()ý tưởng của bạn cho câu trả lời của tôi. Hy vọng bạn không phiền :-)
ElPedro

5

PHP, 39 38 byte, không cạnh tranh (không xảy ra sự cố)

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

hoặc là

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

hoặc là

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

Bất cứ ai cũng có thể chơi golf 4 byte date(Lz)%1001-358? : D
Tít

3
Liệu sự cố này?
edc65

Bạn có thể để lại ""trong mã đầu tiên giúp bạn tiết kiệm 2 Byte. Nếu nó không được cho năm chết tiệt bước nhảy vọt, bạn có thể tiết kiệm 2 Byte hơn bằng cách thay thế mdbằng z1225bằng của số ngày của năm 25 tháng 12.
UTF-8

1
Một cách khác: eval((date(md)^TQZZ).'"Merry Christmas";');(43 byte)
Ismael Miguel

1
@ UTF-8: Quyền của bạn. Tôi chủ yếu sử dụng Elvis cho các giá trị boolean; và điều đó sẽ in 1. Điều này sẽ in kết quả tính toán. và 0104-1225là 1121.
Tít

4

Python 2 , 68 67 65 byte

-1 cảm ơn @muddyfish

Cảm ơn @AnttiHaapala vì ý tưởng đã cứu một cặp vợ chồng khác.

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

Hãy thử trực tuyến!

Ném một IndexError nếu không phải là ngày 25 tháng 12.

Phiên bản không cạnh tranh cho 59 byte vì nó chỉ hoạt động trong các năm không Leap (sử dụng ngày trong năm là 360 trong năm nay nhưng 361 trong năm nhuận)

import time;print['Merry Christmas'][360!=time.gmtime()[7]]

Bạn không thể lưu một byte bằng cách sử dụng một danh sách thay vì một tuple?
Màu xanh

@muddyfish Cảm ơn, bắt tốt.
ElPedro

Thật tuyệt, ý tưởng của tôi là 2 byte thêm : P
FlipTack

Cảm ơn. Đó cũng là phiên bản 67 byte của tôi cho đến khi tôi nhận xét về câu trả lời từ @AnttiHaapala và nghĩ về việc loại gmtime()bỏ một cặp vợ chồng. Tôi phải thừa nhận, tôi ước có nhiều hơn nữa tôi có thể làm với ý tưởng ngày này.
ElPedro

Bạn có thể lưu 1 byte với: time.ctime () [6:10]! = 'C 25'
Tối đa

4

R, 52 61 58 byte

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

Nếu ngày hiện tại không phải là ngày 25 tháng 12 thì lỗi được trả về vì không có đối số thứ ba nào được cung cấp if.

Chỉnh sửa: Đã sửa lỗi ngớ ngẩn


Xin lỗi về lỗi đánh máy nhỏ của tôi. Ý tôi là nói 25tg
Leo

Điều này chỉ hoạt động trong năm nay!
Erresen

@Erresen À đúng rồi, sai lầm ngớ ngẩn. Đã sửa bây giờ.
Billywob

4

Lần đầu tiên của tôi ở đây ... Bắt đầu với ngôn ngữ tốt nhất từng có cho công việc này:

Java, 200 188 byte (nhờ @Daniel Gray), 186 byte loại bỏ "ln" khỏi bản in.

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");}}

Hãy thử nó ở đây!


1
Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay, mặc dù java không phải là bài viết ngắn nhất.
Rɪᴋᴇʀ

1
Bạn có thể thay đổi Calendarfor *và lưu một vài byte. Bạn cũng có thể rút ngắn tên của argstham số trong phương thức chính, tôi nghĩ ...
Daniel Gray

@Daniel Grey, Bạn hoàn toàn đúng, cảm ơn!
Bonifacio

1
Chào mừng bạn Bạn có thể lưu 10 byte nếu thay thế "lớp công khai" bằng "giao diện" và xóa công cụ sửa đổi công khai khỏi main, làm cho nó "giao diện {static void main ..." Tuy nhiên, điều này sẽ ngăn Compilejava không thể chạy nó Trực tuyến.
Zavada

3

MATL , 34 33 byte

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

Điều này hoạt động trong phiên bản hiện tại (19.7.0) của ngôn ngữ. Để gây ra lỗi, đoạn mã sau khai thác thực tế là logarit của chuỗi gây ra lỗi (điều này có thể thay đổi trong các phiên bản trong tương lai).

Hãy thử trực tuyến!

Giải trình

'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 byte

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

Giải trình:

~             IF
left$$|(_D,5) the date string starts with
=@12-25|      the string "12-25"
|             THEN
?@Me..as|     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.

Điều này giả định MM-DDký hiệu ngày của Mỹ . Điều này sẽ ngắn hơn nếu cuối cùng tôi thực hiện chức năng Chuỗi con trong QBIC.


Điều gì xảy ra vào những ngày không Giáng sinh? Nó có sụp đổ như nó phải không?
Erresen

@Erresen nó làm ngay bây giờ.
steenbergh

3

05AB1E ,32 21 byte

Đã lưu 11 byte nhờ nén chuỗi của Adnan :).

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

Giải trình

 ž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

Hãy thử trực tuyến!

Tôi đã làm những gì xuất hiện trong đầu, vì vậy có thể có cách tiếp cận tốt hơn cho cái này. Nhưng PPCG cũng xứng đáng có một Giáng sinh vui vẻ vào năm 05AB1E;).


Ngoài ra, xlà viết tắt của trùng lặp và gấp đôi :).
Ad Nam

3

Tập lệnh C # / CS 106 100 99 byte

Giải pháp 99 byte

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

Hãy thử nó ở đây!

Giải pháp 100 byte (thích cái này ... khác một chút)

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

Giải thích:

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==1ngắn hơn một byte DateTime.Now.ToString("ddMM")=="2512"nhưng dài hơn 1 byteDateTime.Now.ToString("dM")=="2512"


1
Bạn có thể sử dụng $"{DateTime.Now:dM}"=="2512". dMlà mơ hồ, nhưng không phải cho "2512".
Kobi

@Kobi Tôi không thể sử dụng phép nội suy chuỗi cho CS Script :(
Erresen

1
Bạn có thể nếu bạn sử dụng LinqPad (ví dụ $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""55 byte) =)
Kenneth K.

Tại sao int i1/0không công bằng?
NoOneIsHere

1
@Erresen À, lỗi của tôi. Tôi đã không kiểm tra kỹ lưỡng đủ. Tinh chỉnh: $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)(59 byte)
Kenneth K.

2

Tập lệnh C # / CS, 96 byte, chủ yếu là đạo văn từ Erresen

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

Xóa int ituyên bố có lợi cho việc mã hóa cứng bộ phận. Tôi sẽ để lại điều này như một bình luận nhưng không có tiếng tăm.


Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay! Đừng lo lắng về điều bình luận / trả lời, nó không quá quan trọng.
Rɪᴋᴇʀ

2

bash + tiện ích Unix, 51 49 47 byte

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

* Cảm ơn @ KenY-N vì đã chỉ ra rằng các trích dẫn trong tiếng vang có thể được loại bỏ và @IporSircer để giảm kích thước điều kiện xuống 2 byte.


Điều đó cho tôi bash: ${}: bad substitutionlỗi. Ngoài ra, bạn có thể thả các trích dẫn từ Giáng sinh vui vẻ để lưu hai byte. Hơn nữa, [ `date +%m%d` = 1225 ]&&echo Merry Christmaslàm việc cho tôi, bằng 45 byte của tôi .
Ken YN

1
@ KenY-N Lỗi là do cố ý: chương trình được cho là bị sập vào những ngày không phải là Giáng sinh. Cảm ơn bạn đã đề cập rằng các trích dẫn trong tiếng vang có thể được bỏ đi; Tôi bỏ lỡ điều đó.
Spector Mitchell

Rất tiếc, đã bỏ lỡ yêu cầu đó! Đã kiểm tra bằng cách thay đổi chuỗi ngày và bây giờ tôi thấy rằng nó không bị sập. Đã xóa câu trả lời của tôi ... Nhưng, tôi có một giải pháp thay thế, vì vậy hãy để tôi cập nhật nó.
Ken YN

Hãy thử thay thế ${}với !-đánh tôi bằng một byte. Tôi sẽ nâng cao bạn khi bạn giành chiến thắng.
Ken YN

1
@ KenY-N Cảm ơn, nhưng tôi sẽ không đổi $ {} thành! - vì tôi nghĩ rằng cái sau sẽ chỉ hoạt động chính xác trên dòng lệnh, không phải trong một tập lệnh (trừ khi bạn bật thay thế lịch sử, sẽ có thêm nhân vật).
Spector Mitchell

1

Groovy, 57 byte

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

Tai nạn vào các ngày khác 25.12. với groovy.lang.MissingPropertyExceptionbkhông được xác định.


1

Xếp chồng lên nhau , 42 byte

Hãy thử nó ở đây!

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

Điều này tạo ra một mảng phần tử có chứa cụ thể 'Merry Christmas!'. Sau đó, nó đặt ngày thành một chuỗi với tháng tiếp theo là ngày. Nó kiểm tra sự bằng nhau với '1225'(Giáng sinh), đảo ngược nó với ¬, sau đó lấy thành viên đó từ mảng trước. Nếu không phải là Giáng sinh, điều này sẽ xảy ra lỗi với chỉ số. Nếu không, nó in Merry Christmas. (Thay đổi ngày trong chuỗi để xem nó hoạt động như thế nào vào những ngày khác.)


1

Mẻ, 66 byte

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

Dòng mới theo dõi là rất quan trọng, vì nó gây ra phân tích cú pháp của ifcâu lệnh thất bại. Bạn có thể cần phải điều chỉnh kiểm tra ngày để phù hợp với định dạng ngày địa phương của bạn.


1

Python 2, 69 77 75 hoặc 72 70 byte

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

Nếu nó không thành vấn đề nếu nó thoát với một lỗi khi nó là Giáng sinh, thì:

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

CHỈNH SỬA:

Cảm ơn @ Flp.Tkc đã chỉ ra rằng tôi cần phải đưa ra một lỗi

-2 Byte từ @Max để chỉ ra cách xóa dấu hai chấm khỏi hàm strftime


1
Nó có nghĩa là sụp đổ nếu không phải là Giáng sinh, điều này chỉ tồn tại bình thường.
FlipTack

Bạn có thể lưu 2 byte xóa dấu hai chấm -> '% d% m' == '2512'
Tối đa

@Max OK, cảm ơn vì tiền boa. Tôi đã không sử dụng chức năng này trước đây, vì vậy tôi đã không nghĩ đến việc đó
sonrad10

lưu thêm 3 byte với: time.ctime () [6:10] == 'c 25'
Tối đa

1

CJam, 28

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

Dùng thử trực tuyến

Giải trình:

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

0

C # .NET, 180 172 171 byte

Đã lưu 8 byte nhờ Kritixi Lithos

Đã lưu 1 byte nhờ Kritixi Lithos, một lần nữa;)

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();}}}

Thay thế, biến thể vô căn cứ:

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!
}

Bạn có thể cung cấp cho chương trình một tên lớp ngắn hơn?
Kritixi Lithos

Bạn có thể xóa một số byte bằng cách thay đổi "NotChristmasException" thành một cái gì đó ngắn hơn.
Leo

@FishProHD NotChristmasExceptionChỉ có trong biến thể không được chỉnh sửa.
devR Rich

@KritixiLithos Cảm ơn, đã thay đổi điều đó.
devR Rich

1
if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()lưu ý kết hợp nếu tuyên bố và loại bỏ các dấu ngoặc xung quanh Console.Writevà thay thế returnbằng else. Đồng thời thay đổi, var d=DateTime.Nowbạn có thể thoát khỏi ngoại lệ với có lẽ args[-1];sau khi đổi tên args thành anhư vậy a[-1];(điều này không giống với cách chia cho số không được sử dụng ở nơi khác)
Pinkfloydx33

0

Toán học, 46 byte

If[Today[[1,2;;]]=={12,25},"Merry Christmas!"]

Nowtiết kiệm hơn 2 byteToday
Kelly Lowder

Ngoài ra, bạn cần một sự cố trong kết quả Sai, vì vậy tôi nghĩ rằng một cái gì đó giống Quit[]hoặc 1/0nên đủ.
Kelly Lowder

0

Lisp thông thường, 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)))

Sự cố với chức năng không xác định nếu ngày không đúng.


0

awk, 29 byte (+ length ("Merry xmas"))

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

Chạy nó:

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

Lời chào mùa được dẫn đến awk. strftimetrả về tháng + ngày (ví dụ 1226) và nếu nó khớp với 1225 $0bản ghi sẽ được xuất ra. Kết quả so sánh 1225==1226được đặt cho vvar được sử dụng để chia 1 nếu so sánh ngày không thành công.


0

Haskell, 116

Sự cố với "Các mẫu không hoàn chỉnh trong chức năng f" nếu không phải là Giáng sinh.

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

Thật không may, không có chức năng nào cho phép bạn ngay lập tức có được thời gian ở định dạng hữu ích, vì vậy hầu hết điều này là chuyển đổi các định dạng ngày.


0

C #, 122 104 byte

Đã lưu 18 byte, nhờ @raznagul

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

Nó thêm 7 ngày vào ngày hiện tại và kiểm tra xem đó có phải là ngày đầu tiên của năm hay không, nếu có, nó sẽ hiển thị "Giáng sinh vui vẻ", nếu không, nó sẽ chia cho số không.


Điều returnnày là không cần thiết. Sử dụng ithay vì ().
raznagul

0

Ruby, 69 byte

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

Hoạt động trong năm 2016. Không phân biệt giữa năm bình thường và năm nhuận, có thể cần phải điều chỉnh cho những năm không nhảy vọt.


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

(Hãy nhớ rằng datetime.toDateStringphụ thuộc vào miền địa phương, vì vậy điều này có thể không hoạt động tùy thuộc vào miền địa phương của bạn)


0

C #, 90 byte

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

Ném IndexOutOfRangeException nếu không phải là Giáng sinh.

Hãy thử nó ở đây!


0

dòng lệnh bash, 45 48 49 48 byte

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

Tương tự như của Mitchell Spector , nhưng sử dụng grepở chế độ im lặng để kiểm tra trận đấu, sau đó &&sẽ đảm bảo rằng nó chỉ in thành công và ||nguyên nhân khiến nó tìm kiếm lịch sử !-, điều này mang lại cho tôi điều này:

-bash: !-: event not found

Và nó dừng thực thi như !- ; echo foominh chứng. Các bashtài liệu nói rằng !-nđề cập đến việc trừ lệnh hiện hành n, vì vậy có lẽ nó đang được hiểu là !-0, trong đó đưa ra một thông báo lỗi giống hệt nhau (và phi cục bộ).


Ý tưởng tốt, nhưng điều này không sụp đổ vào những ngày khác ngoài Giáng sinh, như nó được cho là, phải không?
Spector Mitchell

Bây giờ nó đưa ra một lỗi về thất bại.
Ken YN

1
Điều này in một thông báo lỗi nhưng nó vẫn tiếp tục; nó không thực sự sụp đổ. Nếu bạn thay thế. với $ {} thì nó thực sự sẽ bị sập thay vì chỉ in một thông báo lỗi và tiếp tục. Tôi nghĩ rằng sự cố đòi hỏi chương trình phải chấm dứt tại thời điểm đó. Bạn có thể nói rằng bạn không chấm dứt bằng cách đặt thêm "; echo x" vào cuối và thấy rằng nó sẽ được thực thi. .
Spector Mitchell

@MitchellSpector: Tôi tìm thấy một chuỗi 2 ký tự!
Ken YN

Và bây giờ trở lại 48 bằng cách chuyển đổi logic để tôi có thể sử dụng ;thay vì ||.
Ken YN
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.