Родительская оболочка, вызывающая bash show_files.sh *
, расширяет *
для вас.
В вашем скрипте вам нужно использовать:
for dir in "$@"
do
echo "$dir"
done
Двойной кавычки гарантируют правильную обработку нескольких пробелов и т. д. в именах файлов.
См. также Как перебирать аргументы в сценарии оболочки bash
.
Если вы действительно уверены, что хотите, чтобы сценарий расширил *
, вы должны убедиться, что *
передано сценарий (заключенный в кавычки, как и в других ответах), а затем убедитесь, что он расширен в правой части обработки (что не является тривиальным). В этот момент я бы использовал массив.
names=( $@ )
for file in "${names[@]}"
do
echo "$file"
done
Я не часто использую $@
без двойных кавычек, но это один раз, когда это более или менее правильная вещь для делать. Сложная часть состоит в том, что он не будет обрабатывать дикие карты с пробелами в очень хорошем состоянии.
Рассмотрим:
$ > "double space.c"
$ > "double space.h"
$ echo double\ \ space.?
double space.c double space.h
$
Это работает отлично. Но попробуйте передать это как wild-card для скрипта и ... ну, давайте просто скажем, что в этот момент это будет сложно.
Если вы хотите извлечь $2
отдельно, то вы можете использование:
names=( $1 )
for file in "${names[@]}"
do
echo "$file"
done
# ... use $2 ...
Cetegory
- это обещание, а не строка. Таким образом, он имеет функцию endsWith
. Вам необходимо использовать окончательное значение обещания в then()
следующим образом.
Cetegory.then(function(_Cetegory){
if (_Cetegory.endsWith('Cat1')){
expect(browser.getCurrentUrl()).toEndWith("Cat1");
}
else {
expect(browser.getCurrentUrl()).toEndWith("Cat2")
}
})