Se você quiser apenas salvar o código de retorno (sucesso / falha) de um comando, use $?
:
# grep -q to avoid sending output to 'stdout' and to stop if it finds the target.
defaults read com.apple.Finder | grep -q "AppleShowAllFiles"
NOTFOUND=$?
# Note that we use an *arithmetic* test, not a string test, and that we have to
# invert the arithmetic value.
if ((!NOTFOUND)); then
# not NOTFOUND is FOUND
# ...
fi
Como alternativa, você pode salvar a saída em uma variável, se, como no seu exemplo, você precisar da cadeia real. Em caso afirmativo, sua solução é razoável, mas esteja ciente de que analisar a saída de programas como defaults
pode ser bastante frágil, já que pequenas alterações no formato farão com que os padrões não sejam correspondidos de repente. Tente fazer seus padrões o mais geral possível:
# Here we use the '-m1' flag to stop matching as soon as the first line matches
ASAF_STRING=$(defaults read com.apple.Finder | grep -m1 "AppleShowAllFiles")
# Try to parse true or false out of the string. We do this in a subshell to
# avoid changing the shell option in the main shell.
ASAF=$(
shopt -s nocasematch
case $ASAF_STRING in
*true*) echo TRUE;;
*false*) echo FALSE;;
*) echo Could not parse AppleShowAllFiles >> /dev/stderr;;
esac
)