首先,eval
它是邪恶的,尤其是在不需要它的时候。在您的情况下eval
,不需要!
将您显示的编码恐惧替换为:
ls | head -1
并将其包含在您的测试语句中:
if [[ $(ls | head -1) = "arguprog.sh" ]]; then echo "TRUE"; else echo "FALSE"; fi
但这是错误的和损坏的(见下文)。
现在更一般的事情:不要解析ls
. 如果要在当前目录中查找第一个文件(或目录或...),请使用 glob 和以下方法:
shopt -s nullglob
files=( * )
# The array files contains the names of all the files (and directories...)
# in the current directory, sorted by name.
# The first one is given by the expansion of "${files[0]}". So:
if [[ "${files[0]}" = "arguprog.sh" ]]; then echo "TRUE"; else echo "FALSE"; fi
请注意,您的方法,解析ls
是错误的。看:
$ # Create a new scratch dir
$ mkdir myscratchdir
$ # Go in there
$ cd myscratchdir
$ # touch a few files:
$ touch $'arguprog.sh\nwith a newline' "some other file"
$ # I created 2 files, none of them is exactly arguprog.sh. Now look:
$ if [[ $(ls | head -1) = "arguprog.sh" ]]; then echo "TRUE"; else echo "FALSE"; fi
TRUE
$ # HORROR!
对此有一些扭曲的解决方法,但实际上,最好的方法是我刚刚给你的方法。
完毕!