Мне нужно иметь возможность написать, является ли тест для grep ИСТИННЫМ или ЛОЖНЫМ для переменной, чтобы я мог использовать ее позже.
Для следующего, если я запускаю
defaults read com.apple.Finder | grep "AppleShowAllFiles"
в моей системе он вернется
AppleShowAllFiles = FALSE;
Прохладный. Итак, теперь я хочу направить этот ответ на какой-то тест. Вот тут я застрял.
Я думаю, что если я смогу направить/назначить этот вывод указанной переменной, я смогу запустить на нем тест. Теперь, просто скажем, я присвоил значение этого вывода переменной, в этом случае я буду использовать ее $ASAF
как свою переменную, я могу запустить ее в тесте, подобном этому
if [ $ASAF = "AppleShowAllFiles = TRUE;" ]; then
defaults write com.apple.Finder AppleShowAllFiles FALSE
killall Finder
else
defaults write com.apple.Finder AppleShowAllFiles True
killall Finder
fi
Если есть какой-то другой способ сделать это, я был бы более чем открыт для вариантов. Мне давно не приходилось делать что-то подобное, и я немного в тупике. Я немного поискал в Google, но это были все ответы без объяснений и с использованием возвращаемого значения 0
or 1
. Я думаю, что возвращаемый вывод, назначенный переменной, был бы более подходящим, так как тогда я могу использовать его снова и снова в сценарии по мере необходимости.
grep
Вам вообще не нужно использовать :
[[ $(defaults read com.apple.finder AppleShowAllFiles) = 0 ]] && bool=true || bool=false
defaults write com.apple.finder AppleShowAllFiles -bool $bool
osascript -e 'quit app "Finder"'
defaults read
печатает логические значения как 1
или 0
. Например True
, or YES
поскольку строка также интерпретируется как логическое значение, но -bool true
указывает, что значение на самом деле является логическим.
Пытаться
if [[ $(defaults read com.apple.Finder | grep "AppleShowAllFiles") == "AppleShowAllFiles = TRUE;" ]]; then
defaults write com.apple.Finder AppleShowAllFiles FALSE
else
defaults write com.apple.Finder AppleShowAllFiles True
fi
killall Finder
$(...)
выполняет часть между ними ()
и заменяет ее результатом. Таким образом, вы также можете сделать
ASAF=$(defaults read com.apple.Finder | grep "AppleShowAllFiles")
чтобы присвоить результат $ASAF
.
PS: я также изменил две другие вещи в вашем сценарии.
[[
для тестовой части (имеет больше функциональности, чем [
и встроен в bash==
для сравнения строк ( =
только для присваиваний`)defaults write.com.apple
имели больший отступ, чем строки выше и ниже? Я попытался заставить это работать для значения форматирования, и это не удалось. :-/>
для кавычек, 4 пробела для кода :-)foofoo=$(defaults read com.apple.foobar | grep "foo")
. В будущем воспользуюсь вашим методом. Вроде стабильнее.=
также можно использовать для сравнения внутри [[
и [
/ test
в bash. POSIX определяет =
, но не определяет ==
(но POSIX также не определяет [[
).
Даниэль-Джеймс (Ж)
TRUE
илиFALSE
значения ответа. Даже лучше, чемgrep
тестировать. Спасибо!