我将此命令作为bash脚本的一部分
$(python -c "import urllib, sys; print urllib.unquote(sys.argv[0])", "h%23g")
但是当我运行它时,我明白了:
-bash: -c: command not found
好像bash错过了阅读python
,并且认为-c
是命令的名称。使用反引号时恰好相同。
如何让bash识别python
?
答案 0 :(得分:6)
Python命令从$(...)结构返回字符串“-c”,然后bash尝试执行。
例如
python -c "import urllib, sys; print urllib.unquote(sys.argv[0])"
打印“-c”,所以你基本上要求bash解释错误有效的$( - c)。
答案 1 :(得分: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'
。
如果使用解释器的
-c
命令行选项执行命令,argv[0]
将设置为字符串'-c'
。
将其与man page(强调我的)中的信息相结合:
-c 命令
指定要执行的命令(请参阅下一节)。这将终止选项列表(以下选项作为参数传递给命令)。
因此,当您使用-c
时,sys.argv[0]
将为'-c'
,提供给-c
的参数是脚本,因此它不会包含在sys.argv
中从索引1开始,sys.argv
添加任何其他参数。