变量作为xpath-bash脚本(html)的标记
我目前正在尝试使用xpath打印网页中的数据集。我在标记数组上循环时遇到问题,因为下面的示例生成空$element变量:变量作为xpath-bash脚本(html)的标记,bash,xpath,Bash,Xpath,我目前正在尝试使用xpath打印网页中的数据集。我在标记数组上循环时遇到问题,因为下面的示例生成空$element变量: declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]'); COUNTER=1 for tag in "${Elements[@]}"; do element="$(curl -s http://mypage | xmllint --html --x
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');
COUNTER=1
for tag in "${Elements[@]}";
do
element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
echo ELEMENT $COUNTER : $element
let COUNTER=COUNTER+1
done
declare-a Elements=('/*[@id=“page wrapper”]/div[1]'/*[@id=“page wrapper”]/div[2]');
计数器=1
对于“${Elements[@]}”中的标记;
做
element=“$(curl-shttp://mypage |xmllint--html--xpath'$tag'-2>text.txt | tr-d'a-z=“”/”)\
echo元素$COUNTER:$ELEMENT
设计数器=计数器+1
完成
如果我手动将“$tag”替换为xpath(.e.g),则具有以下内容:
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');
COUNTER=1
for tag in "${Elements[@]}";
do
element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
echo ELEMENT $COUNTER : $element
let COUNTER=COUNTER+1
done
element="$(curl -s http://mypage | xmllint --html --xpath '//*[@id="page-wrapper"]/div[1]' - 2>text.txt | tr -d 'a-z<>=""/')" \
element=“$(curl-shttp://mypage |xmllint--html--xpath'/*[@id=“page wrapper”]/div[1]'-2>text.txt | tr-d'a-z=“”/”)\
一切都很好。你知道我做错了什么吗?我相信$tag周围的语法有问题,但我看不出我到底做错了什么。如果你能朝正确的方向轻推我,我将不胜感激!更改行
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');
COUNTER=1
for tag in "${Elements[@]}";
do
element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
echo ELEMENT $COUNTER : $element
let COUNTER=COUNTER+1
done
xmllint --html --xpath '$tag'
到
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');
COUNTER=1
for tag in "${Elements[@]}";
do
element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
echo ELEMENT $COUNTER : $element
let COUNTER=COUNTER+1
done
这是经验法则,单引号不会在bash
中展开变量,您需要对它们进行双引号。在变量名称周围使用单引号,会使$
无法执行变量插值
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');
COUNTER=1
for tag in "${Elements[@]}";
do
element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
echo ELEMENT $COUNTER : $element
let COUNTER=COUNTER+1
done
也是一本好书,非常感谢:)很高兴知道这一点!
declare -a Elements=('//*[@id="page-wrapper"]/div[1]' '//*[@id="page-wrapper"]/div[2]');
COUNTER=1
for tag in "${Elements[@]}";
do
element="$(curl -s http://mypage | xmllint --html --xpath '$tag' - 2>text.txt | tr -d 'a-z<>=""/')" \
echo ELEMENT $COUNTER : $element
let COUNTER=COUNTER+1
done