Не уверенный, если существует более авторитетный источник (т.е. страница справочника / официальная документация) по этой проблеме, но я нашел сайт, который объясняет это поведение: http://mywiki.wooledge.org/glob
Поскольку extglob опция изменяет способ, которым анализируются определенные символы, необходимо иметь новую строку (не только точка с запятой) между командой shopt и любыми последующими командами, то использование расширило шарики. Аналогично, Вы не можете поместить shopt-s extglob в блоке операторов, который использует расширенные шарики, потому что блок в целом должен быть проанализирован, когда он определяется; команда shopt не вступит в силу, пока блок не оценен, в которой точке слишком поздно. На самом деле, поскольку удар анализирует весь блок операторов прежде, чем оценить любой из него, необходимо установить extglob за пределами наиболее удаленного блока.
Вот демонстрационный сценарий, который использует команду paste
сопоставлять эти 2 файла в единственный список:
A-A
B-C
...
Это затем анализирует каждую объединенную строку в, он - 2 дискретных части и хранит их в переменных f1
и f2
.
#!/bin/csh
foreach i (`paste -d"-" file1 file2`)
set f1=`echo $i | cut -d"-" -f1`
set f2=`echo $i | cut -d"-" -f2`
if ($f1 == $f2) then
echo "$f1 $f2 -> match"
else
echo "$f1 $f2 -> "'" "'
endif
end
Остальная часть кода является стандартной оболочкой C.
$ ./cmd.csh
A A -> match
B C -> " "
C B -> " "
D D -> match
E E -> match