【发布时间】:2019-04-26 22:51:59
【问题描述】:
所以,我想创建一个脚本,用于从网站检查某事。我有一个包含不同网站的文本文件,我想同时检查所有网站。为此,我在一个调用函数的变量中逐步创建一个命令,该函数将检查每个网站。这是我的代码:
checkWebsite(){
WEBSITE="$2"
echo "Parameter is $WEBSITE"
}
COUNTER=0;
input=websites.txt
myCommand=()
while IFS= read -r line
do
if [[ "$line" != "#"* ]]; #ignoring comments if there are any
then
myCommand[COUNTER]="checkWebsite $line"
COUNTER=$((COUNTER + 1))
myCommand[COUNTER]=" & "
COUNTER=$((COUNTER + 1))
fi
done < "$input"
unset 'myCommand[${#myCommand[@]}-1]' #deleting the last " & "
echo "MY COMMAND: "
echo ${myCommand[@]}
echo " "
echo ${myCommand[0]}
checkWebsite ${myCommand[0]}
"${myCommand[0]}"
结果如下: results
如您所见,如果我从脚本中调用该函数一切正常,但如果我从变量中调用该函数,则它不起作用。我理解为什么会发生这种情况(就像我从终端运行该命令)但我不知道当我从变量执行命令时如何让它从脚本运行函数。有谁知道我怎样才能做到这一点?
提前致谢
【问题讨论】:
-
把它放在一个变量中会使它变得比它必须的更难和更混乱。你有什么理由不直接运行它吗?
-
问了很多次:bash command parameter substitution site:stackoverflow.com。您想要哪个作为您的副本?
-
另见BashFAQ #50。
"${myCommand[0]}"完全违背了使用数组的全部目的——仅取消第一个元素意味着它只是另一个字符串。 -
顺便说一句,
declare -p myCommand比echo ${myCommand[@]}让您更准确地了解数组的内容。 (就此而言,printf '%q\n' "${myCommand[@]}"也是一种改进)。
标签: linux bash shell terminal sh