1

我将此命令作为 bash 脚本的一部分

$(python -c "import urllib, sys; print urllib.unquote(sys.argv[0])", "h%23g")

但是当我运行它时,我得到了这个:

-bash: -c: command not found

好像 bash 错过了阅读python, 并且正在考虑-c命令的名称。使用反引号时会发生完全相同的情况。

我怎样才能让 bash 识别python

4

2 回答 2

6

Python 命令从您的 $(...) 结构中返回字符串“-c”,然后 bash 会尝试执行该字符串。

例如

python -c "import urllib, sys; print urllib.unquote(sys.argv[0])"

打印“-c”,因此您实际上是在要求 bash 解释 $(-c),对于该错误有效。

于 2013-04-09T17:37:24.527 回答
3

我认为您想要以下内容:

$(python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "h%23g")

这将导致h#g,如果这是您在一行上的全部内容,那么它还将尝试运行一个名为 的命令h#g,所以我假设您实际上将其用作更大命令的一部分。

您的版本的问题sys.argv[0]-c来自命令,并且urllib.unquote('-c')只会返回'-c'.

文档中sys.argv

如果命令是使用-c解释器的命令行选项执行的,argv[0]则设置为字符串'-c'

将其与手册页中的信息相结合(强调我的):

-c command
指定要执行的命令(见下一节)。这将终止选项列表(以下选项作为参数传递给命令)

因此,当您使用-c, sys.argv[0]will be'-c'时,提供给的参数-c是脚本,因此它不会包含在 中sys.argv,并且任何其他参数都sys.argv将从索引 1 开始添加。

于 2013-04-09T17:37:14.270 回答