【发布时间】:2017-09-25 22:48:04
【问题描述】:
在这三个简短的测试中,只有第二个测试正确:
$ 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
有什么线索吗?
谢谢。
编辑 - 在接受的答案中回复 cmets:
$ 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
>
编辑新问题是“X”在“a”之前。
$ 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? (在设置之前跟踪它是什么,以便之后重新设置。) -
@JonathanLeffler,哇,它有效。您可以发布答案以便我接受吗?
标签: string bash command-line path