是否存在与python的shlex.split等效的bash内置函数或表达式?如果它不仅可以处理空格,还可以处理任何IFS,那就太好了。
我有一个包含一堆简单的bash命令的文件。
cat a_filename
ls a\ filename\ with\ spaces
less "another with spaces"
ln -s "this is" my\ favorite
echo $(I do not mind if this does not work)
我要做的是通过将每一行上的命令拆分为参数数组来逐行处理此文件。我可以使用shlex.split在python中足够简单地做到这一点:
>>> import shlex
>>> for line in open("/tmp/example"):
... print(shlex.split(line))
...
['cat', 'a_filename']
['ls', 'a filename with spaces']
['less', 'another with spaces']
['ln', '-s', 'this is', 'my favorite']
['echo', '$(I', 'do', 'not', 'mind', 'if', 'this', 'does', 'not', 'work)']
请注意,我对非流行的解决方案或使用评估或手工转义的解决方案不感兴趣。以下示例不是不是一个好的解决方案,因为它允许命令注入。
$ cat /tmp/example_line
cat "this is" not\ ok $(date)
$ eval "array=($(cat /tmp/example_line))"
$ echo ${array[@]}
cat this is not ok Sun Jan 13 17:13:44 CET 2019