将参数从shell传递到嵌入式Python脚本

将参数从shell传递到嵌入式Python脚本,python,bash,shell,zsh,Python,Bash,Shell,Zsh,我编写了一个shell函数,旨在与zsh和bash兼容: py () { python -c 'print($1)'; } 但是当我使用py hello时,Python解释器会出错: ➜ ~ py hello File "<string>", line 1 print($1) ^ SyntaxError: invalid syntax ➜ ~ 你好 文件“”,第1行 印刷品(1美元) ^ SyntaxError:无效语法 我做错了什么?

我编写了一个shell函数,旨在与zsh和bash兼容:

py () { python -c 'print($1)'; }
但是当我使用
py hello
时,Python解释器会出错:

➜  ~  py hello
  File "<string>", line 1
    print($1)
          ^
SyntaxError: invalid syntax
➜  ~  你好
文件“”,第1行
印刷品(1美元)
^
SyntaxError:无效语法
我做错了什么?
谢谢

根本不要使用字符串替换——那样的话就是(的表亲)。相反,将参数传递到带外:

py() { python -c 'import sys; print sys.argv[1]' "$@"; }
py hello
为了说明为什么另一种方法是危险的:

py() { python -c "print('${1}')"; }
py "hello' + str(__import__('os').system('touch /tmp/broke-your-security')) + '"

运行时,此代码将创建一个文件
/tmp/破坏您的安全性
。考虑如果命令涉及到“代码> > RM- RF ,或<代码> CURLL SH 来拉下rootkit会发生什么情况。我不是在生产中使用这个函数,只是为了个人使用:)@sindhus,当然,但你最终会编写生产代码,不是吗?最好在重要之前养成良好的习惯。:)