diff --git a/Library/Homebrew/cask/cmd/reinstall.rb b/Library/Homebrew/cask/cmd/reinstall.rb
index a8711bec8809180695da78e720305de511b36ce3..bf0d0909e89c2f38ef98dd9960b8f8ef90784a97 100644
--- a/Library/Homebrew/cask/cmd/reinstall.rb
+++ b/Library/Homebrew/cask/cmd/reinstall.rb
@@ -4,13 +4,42 @@ module Cask
   class Cmd
     class Reinstall < Install
       def run
+        self.class.reinstall_casks(
+          *casks,
+          binaries: binaries?,
+          verbose: verbose?,
+          force: force?,
+          skip_cask_deps: skip_cask_deps?,
+          require_sha: require_sha?,
+          quarantine: quarantine?,
+        )
+      end
+
+      def self.reinstall_casks(
+        *casks,
+        binaries: nil,
+        verbose: nil,
+        force: nil,
+        skip_cask_deps: nil,
+        require_sha: nil,
+        quarantine: nil
+      )
+        # TODO: Handle this in `CLI::Parser`.
+        binaries       = Homebrew::EnvConfig.cask_opts_binaries?       if binaries.nil?
+        force          = Homebrew::EnvConfig.cask_opts_force?          if force.nil?
+        quarantine     = Homebrew::EnvConfig.cask_opts_quarantine?     if quarantine.nil?
+        require_sha    = Homebrew::EnvConfig.cask_opts_require_sha?    if require_sha.nil?
+        skip_cask_deps = Homebrew::EnvConfig.cask_opts_skip_cask_deps? if skip_cask_deps.nil?
+        verbose        = Homebrew::EnvConfig.cask_opts_verbose?        if verbose.nil?
+
         casks.each do |cask|
-          Installer.new(cask, binaries:       binaries?,
-                              verbose:        verbose?,
-                              force:          force?,
-                              skip_cask_deps: skip_cask_deps?,
-                              require_sha:    require_sha?,
-                              quarantine:     quarantine?).reinstall
+          Installer.new(cask,
+                        binaries:       binaries,
+                        verbose:        verbose,
+                        force:          force,
+                        skip_cask_deps: skip_cask_deps,
+                        require_sha:    require_sha,
+                        quarantine:     quarantine).reinstall
         end
       end
 
diff --git a/Library/Homebrew/cask/cmd/uninstall.rb b/Library/Homebrew/cask/cmd/uninstall.rb
index dfa8bbfb77617a08d33fe3e1b40c99d6d82eeb76..3f595b9ca42e08be4dd530da7ff2e6da5a6d913f 100644
--- a/Library/Homebrew/cask/cmd/uninstall.rb
+++ b/Library/Homebrew/cask/cmd/uninstall.rb
@@ -11,17 +11,31 @@ module Cask
       end
 
       def run
+        self.class.uninstall_casks(
+          *casks,
+          binaries: binaries?,
+          verbose: verbose?,
+          force: force?
+        )
+      end
+
+      def self.uninstall_casks(*casks, binaries: nil, verbose: nil, force: nil)
+        # TODO: Handle this in `CLI::Parser`.
+        binaries = Homebrew::EnvConfig.cask_opts_binaries? if binaries.nil?
+        force    = Homebrew::EnvConfig.cask_opts_force?    if force.nil?
+        verbose  = Homebrew::EnvConfig.cask_opts_verbose?  if verbose.nil?
+
         casks.each do |cask|
           odebug "Uninstalling Cask #{cask}"
 
-          raise CaskNotInstalledError, cask unless cask.installed? || force?
+          raise CaskNotInstalledError, cask unless cask.installed? || force
 
           if cask.installed? && !cask.installed_caskfile.nil?
             # use the same cask file that was used for installation, if possible
             cask = CaskLoader.load(cask.installed_caskfile) if cask.installed_caskfile.exist?
           end
 
-          Installer.new(cask, binaries: binaries?, verbose: verbose?, force: force?).uninstall
+          Installer.new(cask, binaries: binaries, verbose: verbose, force: force).uninstall
 
           next if (versions = cask.versions).empty?
 
diff --git a/Library/Homebrew/cask/cmd/upgrade.rb b/Library/Homebrew/cask/cmd/upgrade.rb
index a2fe3b8c139640f726b46467d27070e27c0cf4f0..c8db6319d2e7f6d18458b823553aa15cec9b6236 100644
--- a/Library/Homebrew/cask/cmd/upgrade.rb
+++ b/Library/Homebrew/cask/cmd/upgrade.rb
@@ -33,12 +33,23 @@ module Cask
 
       def self.upgrade_casks(
         *casks,
-        force: false, greedy: false, dry_run: false, binaries: true, skip_cask_deps: false, verbose: false,
-        quarantine: nil, require_sha: nil
+        force: nil,
+        greedy: nil,
+        dry_run: nil,
+        binaries: nil,
+        skip_cask_deps: nil,
+        verbose: nil,
+        quarantine: nil,
+        require_sha: nil
       )
         # TODO: Handle this in `CLI::Parser`.
-        quarantine = Homebrew::EnvConfig.cask_opts_quarantine? if quarantine.nil?
+        binaries    = Homebrew::EnvConfig.cask_opts_binaries?    if binaries.nil?
+        dry_run     = Homebrew::EnvConfig.cask_opts_dry_run?     if dry_run.nil?
+        force       = Homebrew::EnvConfig.cask_opts_force?       if force.nil?
+        greedy      = Homebrew::EnvConfig.cask_opts_greedy?      if greedy.nil?
+        quarantine  = Homebrew::EnvConfig.cask_opts_quarantine?  if quarantine.nil?
         require_sha = Homebrew::EnvConfig.cask_opts_require_sha? if require_sha.nil?
+        verbose     = Homebrew::EnvConfig.cask_opts_verbose?     if verbose.nil?
 
         outdated_casks = if casks.empty?
           Caskroom.casks.select do |cask|
diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb
index e70106f114b98c7684dc268246e6580df360b40c..cd57578a132c8fd37fa8e759bc32c32c9e7c8ec1 100644
--- a/Library/Homebrew/cmd/reinstall.rb
+++ b/Library/Homebrew/cmd/reinstall.rb
@@ -78,9 +78,14 @@ module Homebrew
 
     return if casks.blank?
 
-    reinstall_cmd = Cask::Cmd::Reinstall.new(casks)
-    reinstall_cmd.verbose = args.verbose?
-    reinstall_cmd.force = args.force?
-    reinstall_cmd.run
+    Cask::Cmd::Reinstall.reinstall_casks(
+      *casks,
+      binaries:       args.binaries?,
+      verbose:        args.verbose?,
+      force:          args.force?,
+      require_sha:    args.require_sha?,
+      skip_cask_deps: args.skip_cask_deps?,
+      quarantine:     args.quarantine?,
+    )
   end
 end
diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb
index be851d9e85e48287f99d03ea0ed69acef6c02f0c..0a789eab26805a03d32bc38ed9c488a9241319f2 100644
--- a/Library/Homebrew/cmd/uninstall.rb
+++ b/Library/Homebrew/cmd/uninstall.rb
@@ -127,10 +127,12 @@ module Homebrew
 
     return if casks.blank?
 
-    cask_uninstall = Cask::Cmd::Uninstall.new(casks)
-    cask_uninstall.force = args.force?
-    cask_uninstall.verbose = args.verbose?
-    cask_uninstall.run
+    Cask::Cmd::Uninstall.uninstall_casks(
+      *casks,
+      binaries: args.binaries?,
+      verbose:  args.verbose?,
+      force:    args.force?,
+    )
   rescue MultipleVersionsInstalledError => e
     ofail e
     puts "Run `brew uninstall --force #{e.name}` to remove all versions."
diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb
index 86940d7b32f8d9af9d9f449ef70b1cc6c15a16a6..9b636ab4a20ba7a4b727473dac6078fc05d73a1d 100644
--- a/Library/Homebrew/env_config.rb
+++ b/Library/Homebrew/env_config.rb
@@ -323,6 +323,27 @@ module Homebrew
       Shellwords.shellsplit(ENV.fetch("HOMEBREW_CASK_OPTS", ""))
     end
 
+    def cask_opts_binaries?
+      cask_opts.reverse_each do |opt|
+        return true if opt == "--binaries"
+        return false if opt == "--no-binaries"
+      end
+
+      true
+    end
+
+    def cask_opts_dry_run?
+      cask_opts.include?("--dry-run")
+    end
+
+    def cask_opts_force?
+      cask_opts.include?("--force")
+    end
+
+    def cask_opts_greedy?
+      cask_opts.include?("--greedy")
+    end
+
     def cask_opts_quarantine?
       cask_opts.reverse_each do |opt|
         return true if opt == "--quarantine"
@@ -335,5 +356,13 @@ module Homebrew
     def cask_opts_require_sha?
       cask_opts.include?("--require-sha")
     end
+
+    def cask_opts_skip_cask_deps?
+      cask_opts.include?("--skip-cask-deps")
+    end
+
+    def cask_opts_verbose?
+      cask_opts.include?("--verbose")
+    end
   end
 end
diff --git a/docs/Manpage.md b/docs/Manpage.md
index f7e051a7b4fbf79c8402bb0a5c406b6c56595bc4..0cfe7f96028d757bff281b03f6ea17e7e85f26b6 100644
--- a/docs/Manpage.md
+++ b/docs/Manpage.md
@@ -1398,6 +1398,9 @@ Note that environment variables must have a value set to be detected. For exampl
 
     *Default:* macOS: `$HOME/Library/Caches/Homebrew`, Linux: `$XDG_CACHE_HOME/Homebrew` or `$HOME/.cache/Homebrew`.
 
+  * `HOMEBREW_CASK_OPTS`:
+    Options which should be used for all `cask` commands.
+
   * `HOMEBREW_CLEANUP_MAX_AGE_DAYS`:
     Cleanup all cached files older than this many days.
 
diff --git a/manpages/brew.1 b/manpages/brew.1
index 0278f39a0e6eba1291ade4ef41f43f06da695a12..3c878e3ef39782dacd3ed48cde7f676cb93423f4 100644
--- a/manpages/brew.1
+++ b/manpages/brew.1
@@ -1818,6 +1818,10 @@ Use the specified directory as the download cache\.
 \fIDefault:\fR macOS: \fB$HOME/Library/Caches/Homebrew\fR, Linux: \fB$XDG_CACHE_HOME/Homebrew\fR or \fB$HOME/\.cache/Homebrew\fR\.
 .
 .TP
+\fBHOMEBREW_CASK_OPTS\fR
+Options which should be used for all \fBcask\fR commands\.
+.
+.TP
 \fBHOMEBREW_CLEANUP_MAX_AGE_DAYS\fR
 Cleanup all cached files older than this many days\.
 .