Копирование здесь вообще не должно использоваться. Попробуйте вместо этого заполнить значение ячейки. Кроме того, вы не объявили переменную text
, поэтому вы получаете объект требуемая ошибка. Ваш код должен читать:
Dim text As String
text = HTML_Content.getElementsByTagName("p")(0).innerText
Sheets(1).Range("L4").Value = text
Я не совсем понял, что вам нужно. Я пытаюсь ответить вам, несмотря на это.
Т.е. мне нужно выйти, если тест не пройден.
Код:
${varName:? "${varName} is not defined"}
вернет ненулевой код выхода, если нет переменной с именем "varName" , Код выхода последней команды сохраняется в $?
.
О вашем коде:
val=${1:? "${1} must be defined, preferably in $basedir"}
Возможно, он не выполняет то, что вам нужно. В случае, если $ 1
не определено, «$ {1}»
будет заменено ничем. Возможно, вы захотите использовать одинарные кавычки, которые буквально записывают $ {1}
без подстановки.
val=${1:? '${1} must be defined, preferably in $basedir'
То, что вы ищете, - это косвенное обращение.
assertNotEmpty() {
: "${!1:? "$1 is empty, aborting."}"
}
Это приводит к прерыванию сценария с сообщением об ошибке, если вы сделаете что-то вроде этого:
$ foo=""
$ assertNotEmpty foo
bash: !1: foo is empty, aborting.
Если вы просто хотите проверьте , является ли foo
пустым, вместо прерывания скрипта используйте это вместо функции:
[[ $foo ]]
Например:
until read -p "What is your name? " name && [[ $name ]]; do
echo "You didn't enter your name. Please, try again." >&2
done
Также обратите внимание на очень важное различие между пустым и неустановленным параметром. Будьте осторожны, чтобы не перепутать эти термины! Пустой параметр - это параметр, который установлен, но просто установлен в пустую строку. Неустановленный параметр - это параметр, которого вообще не существует.
Все предыдущие примеры проверяли наличие пустых параметров. Если вы хотите протестировать неустановленные параметры и считать все установленные параметры в порядке, то пусто или нет, используйте это:
[[ ! $foo && ${foo-_} ]]
Используйте его в такой функции:
assertIsSet() {
[[ ! ${!1} && ${!1-_} ]] && {
echo "$1 is not set, aborting." >&2
exit 1
}
}
Которая прерывает скрипт только тогда, когда имя параметра, которое вы передаете, обозначает параметр, который не установлен:
$ ( foo="blah"; assertIsSet foo; echo "Still running." )
Still running.
$ ( foo=""; assertIsSet foo; echo "Still running." )
Still running.
$ ( unset foo; assertIsSet foo; echo "Still running." )
foo is not set, aborting.
Благодаря ответу лхуната я попал на часть страницы Bash man
, которую я пропустил сотни раз:
When not performing substring expansion, bash tests for a parameter that is unset or null; omitting the colon results in a test only for a parame‐ ter that is unset.
Это побудило меня создать следующую таблицу истинности:
| unset | set | set and | meaning | | but null | not null | ============+=======+==========+==========+============================= ${var-_} | T | F | T | not null or not set ------------+-------+----------+----------+----------------------------- ${var:-_} | T | T | T | always true, use for subst. ------------+-------+----------+----------+----------------------------- $var | F | F | T | var is set and not null ------------+-------+----------+----------+----------------------------- ${!var[@]} | F | T | T | var is set
Эта таблица вводит спецификацию в последней строке. На странице Bash man
написано: «Если имя не является массивом, расширяется до 0, если имя установлено, и до нуля в противном случае». Для целей этой таблицы истинности она ведет себя одинаково, даже если это массив.