【发布时间】:2013-06-10 03:30:05
【问题描述】:
在命令行上是这样工作的:
svn log "$src_url" --stop-on-copy \
| awk -v RS="--+" -F'|' ' /ticket-101/{print $1}' \
| grep "^r" \
| cut -d"r" -f2 \
| cut -d" " -f1
输出:
6359
6358
6263
6241
6240
6239
6238
6237
6236
脚本在对票号进行硬编码时有效,但在我将其分配为变量时无效。我可能需要提供不止一张票,因此需要此功能。
#!/usr/bin/bash
src_url="$1"
itrack=ticket-101
for ticket in "$itrack"; do
echo $ticket
revs=($(IFS=$'\n';
svn log "$src_url" --stop-on-copy \
| awk -v RS="--+" -F'|' ' /"$ticket"/{print $1}' \
| grep "^r" \
| cut -d"r" -f2 \
| cut -d" " -f1 \
| sort -r
))
for revision in ${!revs[*]} ; do
echo ${revs[$revision]}
done
done
Output gives nothing.
我试图解析的svn 命令的输出是:
$ svn log http://test.svn.com/svn/demo_project --limit 5
------------------------------------------------------------------------
r1000 | testuser25 | 2013-06-13 13:37:10 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-1135
------------------------------------------------------------------------
r999 | testuser20 | 2013-06-13 13:26:46 -0400 (Thu, 13 Jun 2013) | 2 lines
ticket-1135
------------------------------------------------------------------------
r998 | testuser30 | 2013-06-13 12:12:12 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-122
------------------------------------------------------------------------
r997 | testuser25 | 2013-06-13 12:09:56 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-11
------------------------------------------------------------------------
r900 | testuser40 | 2013-06-13 12:09:53 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-113
------------------------------------------------------------------------
如果输入是:/run.sh http://test.svn.com/svn/demo_project ticket-1135 ticket-122 ticket-113
期望的输出是:
900
998
999
1000
【问题讨论】:
-
' /$ticket/{print $1}'不会在单引号中展开尝试双引号 -
向我们展示你的输入和你的预期输出,更容易重写整个事情......这不是你想要这样做(或任何事情)的方式。
-
现在更新了 - 命令行输出和我如何编写脚本。
-
双引号也不起作用。
-
为什么
${!revs[*]}的感叹号?我猜您只想循环遍历数组并打印内容...并且正确的语法是${revs[@]}循环遍历数组。要调试,请将 shebang 更改为#!/usr/bin/bash -x
标签: bash for-loop scripting awk cut