Множество условий, как показано ниже, отлично работает с идеальным текстовым файлом, но фактический вывод моего кода должен иметь некоторые дополнительные строки.Что не так с этим многократным условием цикла в bash
в то время как петля множественного условия:
while read -r line && ([[ ! "${line/"[ebuild"}" = "${line}" ]] && [[ -n "${line}" ]])
do
echo "This is the line: $line."
done
Если я изменил код ниже, он работает нормально.
while read -r line
do
if [ ! "${line/"[ebuild"}" = "${line}" ] && [ -n "${line}" ]; then
echo "This is the line: $line."
fi
done
Идеальный текстовый файл:
[ebuild R ] app-arch/xz-utils-5.2.2::gentoo USE="nls static-libs* threads" 0 KiB
[ebuild R ] sys-libs/zlib-1.2.8-r1::gentoo USE="static-libs -minizip" 0 KiB
[ebuild R ] virtual/libintl-0-r2::gentoo 0 KiB
...
Фактический текстовый файл:
These are the packages that would be merged, in order:
Calculating dependencies ... done!
[ebuild R ] app-arch/xz-utils-5.2.2::gentoo USE="nls static-libs* threads" 0 KiB
[ebuild R ] sys-libs/zlib-1.2.8-r1::gentoo USE="static-libs -minizip" 0 KiB
[ebuild R ] virtual/libintl-0-r2::gentoo 0 KiB
Что случилось с ним? Большое спасибо!
Обратите внимание, что вы можете использовать '&&' и '||' inside '[[...]]', поэтому вы можете написать 'read -r line && [[! "$ {line /" [ebuild "}" = "$ {line}" && -n "$ {line}"]] '. – chepner
Я пробовал, не работал вообще, как комментировал Гордон, независимо от того, как я изменяю логический порядок, ни один из них не будет работать. Мне нужно переместить несколько условий внутри цикла while. –