1

我有以下 shell 脚本:

#! /bin/sh

while read page_section
  page=${page_section%%\ *}
  section=${page_section#* }     #NOTE: `%* }` is NOT a comment

  wget --quiet --no-proxy www.cs.sun.ac.za/hons/$page -O html.tmp & wait

#  echo ${page_section%%\ *} # verify correct string chopping
#  echo ${page_section#* }   # verify correct string chopping

  ./DokuWikiHtml2Latex.py html.tmp $section & wait
done < inputfile

和这样的输入文件:

doku.php?id=ndewet:tools:tramonitor TraMonitor
doku.php?id=ndewet:description Implementation -1
doku.php?id=ndewet:description Research\ Areas -1

该脚本会下载一些指定的网页,inputfile然后必须将行的其余部分(例如“实施 -1”或“研究\领域 -1”)传递给 python 脚本。

现在是粘性位。处理此示例文件的第三行时,它将“Research\Areas”作为两个单独的参数传递给 python 脚本,如下所示:

>>> print sys.argv
['./DokuWikiHtml2Latex.py', 'html.tmp', 'Research', 'Areas', '-1']

如何将输入文件中的“研究领域”等多字部分转换为 python 脚本的单个参数?我试过转义'\',并且也在做

./DokuWikiHtml2Latex.py html.tmp `echo ${section#* }`

除其他外,但无济于事。

输入行末尾的数字是另一个参数,但可选。

4

3 回答 3

2

在 $section 周围加上引号:

./DokuWikiHtml2Latex.py html.tmp "$section" & wait
于 2010-07-19T16:13:15.123 回答
1

让我们read做解析的东西:

while read page section rest
do
    echo "Page: $page"
    echo "Section: $section"
done < inputfile

为了优雅地处理可选参数,请使用数组:

while read -a fields
do
    wget --quiet --no-proxy "www.cs.sun.ac.za/hons/${fields[0]}" -O html.tmp
    unset "fields[0]"
    ./DokuWikiHtml2Latex.py html.tmp "${fields[@]}"
done < inputfile

总是引用你的变量!

于 2010-07-19T16:12:39.703 回答
0

通常,多字参数可以使用引号作为一个参数传递,因此:

doku.php?id=ndewet:description "Research Areas" -1
于 2010-07-19T16:12:50.303 回答