pythonでほんのすこしだけshellのような挙動をするものを作れという課題が出たからやってたけど、勝手にos.system()使っちゃダメだと判断してたせいでいらないものを作ってしまった。そこそこ時間がかかったのに消すのも癪に障るので一応とっておこう(echoをpythonで実装する課題とかなさそうだけど)
引数のargsはechoの後ろにある引数をリストにまとめたものです。
echo -e "a"と入力した時はargsの中身は[['-e', '"a"']]
になっている。
echoだけだと[False]
def echo(args): e, n = False, False #e: エスケープ文字を解釈, n: 最後に改行しない literal = [] for args2 in args: if args2 == False: return for arg in args2: match arg: case '-e': e = True case '-n': n = True case '-en': e, n = True, True case '-ne': e, n = True, True case _: if arg[0] == arg[-1] == '"': literal.append(arg[1:-1]) else: print("Invalid argument ->", arg) return print_str(literal, e, n) def print_str(line, e, n): if not e and not n: print(str(line).replace("[", "").replace("]", "").replace(",", "").replace("'", "").replace("\\\\", "\\")) elif e and not n: result: str = str(line).replace("[", "").replace("]", "").replace(",", "").replace("'", "").replace("\\\\", "\\").replace('\\n', '\n').replace('\\t', '\t') print(result) elif not e and n: print(str(line).replace("[", "").replace("]", "").replace(",", "").replace("'", "").replace("\\\\", "\\"), end="") else: result: str = str(line).replace("[", "").replace("]", "").replace(",", "").replace("'", "").replace("\\\\", "\\").replace('\\n', '\n').replace('\\t', '\t') print(result, end="")
print_strの条件分岐絶対もっときれいに書く方法ある…