在这三个短测试中,第二个测试仅正确地工作:
$ 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
edit 证明它有效(您可以在自己的非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
>
编辑新问题是" x"。
$ 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
命令使用的内容。
将注释转换为答案。
您是否尝试过在运行测试之前在环境中设置LANG=C
?(在设置之前跟踪它是什么,以便以后可以将其重置。(
我应该注意,尽管这似乎对他们的环境中的OP有效,但在Macos Sierra 10.12.4上似乎并没有有所作为 - 无论是使用本地bash 3.2.x还是更现代的bash 4.3.x。
您的里程可能会有所不同,因此。