在这三个简短的测试中,只有第二个测试正确:
$ if [[ "/etc/cupshelpers" > "/etc/cups/interfaces" ]]; then echo ">"; else echo "<="; fi
<=
$ if [[ "/etc/cupsh" > "/etc/cups/" ]]; then echo ">"; else echo "<="; fi
>
$ if [[ "/etc/cupshe" > "/etc/cups/i" ]]; then echo ">"; else echo "<="; fi
<=
当我对目录列表进行排序并且结果与tree
命令不同时,问题变得明显:
$ tree /etc/cups* -d
/etc/cups
├── interfaces
├── ppd
└── ssl [error opening dir]
/etc/cupshelpers
任何线索?
感谢。
修改 - 回复已接受答案中的评论:
$ bash --version
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ uname -a
Linux dell 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
修改证明其有效(您可以试用自己的非Mac机器)。
$ if [[ "/etc/cupshelpers" > "/etc/cups/interfaces" ]]; then echo ">"; else echo "<="; fi
<=
$ LANG=C
$ if [[ "/etc/cupshelpers" > "/etc/cups/interfaces" ]]; then echo ">"; else echo "<="; fi
>
修改新问题是&#34; X&#34;来之前&#34; a&#34;。
$ if [[ "/etc/X11/xsm" > "/etc/acpi" ]]; then echo ">"; else echo "<="; fi
>
$ echo $LANG
en_CA.UTF-8
$ LANG=C
$ if [[ "/etc/X11/xsm" > "/etc/acpi" ]]; then echo ">"; else echo "<="; fi
<=
我没有什么特别的尝试。我使用tree
命令生成目录名列表(3,000到20,000)。后来我将一个目录附加到列表中,我需要使用内部bash数组。在bash冒泡排序期间,整理顺序会导致数百个额外的目录不按顺序向上移动。
我认为我不需要特殊的整理顺序,只需tree
或ls
命令使用。
答案 0 :(得分:1)
将评论转换为答案。
在运行测试之前,您是否尝试在您的环境中设置LANG=C
? (在设置之前记录它是什么,以便之后可以重置它。)
我应该注意到虽然这似乎适用于他们环境中的OP,但它似乎对我在macOS Sierra 10.12.4上有所作为 - 无论是使用原生Bash 3.2.x还是更现代Bash 4.3.x。
因此,您的里程可能会有所不同。