diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 34a5bd6118..ebc68eac00 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -2278,7 +2278,8 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { } settings.dictionary_order = dictionary_order; - settings.ignore_non_printing = ignore_non_printing; + // -i has no effect when -d is also given, as for key options + settings.ignore_non_printing = ignore_non_printing && !dictionary_order; settings.ignore_case = ignore_case; let threads = match matches.get_one::(options::PARALLEL) { diff --git a/tests/by-util/test_sort.rs b/tests/by-util/test_sort.rs index c309ad5b29..e0e6554fef 100644 --- a/tests/by-util/test_sort.rs +++ b/tests/by-util/test_sort.rs @@ -574,6 +574,24 @@ fn test_non_printing_chars() { .stdout_only("a👦🏻aa\naaaa\n"); // spell-checker:disable-line } +#[test] +fn test_dictionary_order_overrides_non_printing() { + // -i has no effect with -d, so the tab is kept as a blank + for args in [ + &["-d", "-i"][..], + &["-i", "-d"], + &["-di"], + &["-id"], + &["-di", "-k1"], + ] { + new_ucmd!() + .args(args) + .pipe_in("\tK\n7\n") + .succeeds() + .stdout_only("\tK\n7\n"); + } +} + #[test] fn test_exponents_positive_general() { new_ucmd!()