【发布时间】:2017-01-09 15:45:38
【问题描述】:
我有以下两行 test.txt 文件
keyword 1, 2010-10-01 | 1 | 2 | 3 | 4
keyword 2, 2010-10-01 | 1 | 2 | 3 | 4
并想ack 为keyword1 和keyword2。我称这个脚本
#!/bin/bash
OUTPUTPATH=$1"/"
JOB=$2
ID="_"$3".csv"
for keyword in "${@:4}"
do
trKeyWord=$(echo "$keyword" | sed 's/ //g')
ack \""$keyword"\" $JOB > $OUTPUTPATH$trKeyWord$BSLD_ID
done
通过
bash script.sh /home/username/ test.txt test "keyword 1" "keyword 2"
输出文件keyword1_test.csv、keyword2_test.csv 已创建,但它们为空!问题一定是我如何使用ack \""$keyword"\" $JOB,因为只运行这个命令就会得到一个空结果。
【问题讨论】:
-
为什么外双引号要反斜杠?
-
如果我只使用 "$keyword" 它将执行
ack keyword 1 test.txt但我想要ack "keyword 1" test.txt -
@tenticon 不,那是错误的。
-
您在前三行中的引用有点倒退。如果有的话,您想引用变量,而不是固定字符串:
OUTPUTPATH="$1"/; JOB="$2"; ID=_"$3".csv。但是你应该使用小写的变量名; ALL_UPPERCASE 变量用于系统。 -
另外,你可以用
${keyword/ }删除空格,不需要外部命令。