while [ -n "$1" ]; 开始的循环何时开始执行?

while [ -n "$1" ]; 开始的循环何时开始执行?

我有一个以 while 循环开头的 shell 脚本

while [ -n "$1" ]; do

我知道 that$1指的是脚本名称后面的参数,即firstargument当我执行时./myscript.sh firstargument。是做什么的-n

答案1

-n是对非空字符串的测试。

如果"$1"扩展为空字符串,则该特定测试失败并且循环将不会执行。

这是可能循环体包含shift将下一个位置参数移入的语句$1,并且以这种方式循环遍历脚本的参数,直到找到空参数或到达参数列表的末尾。

test实用程序相当于[,但[要求最后一个参数是]

测试也可以写成

while test -n "$1"; do

[和都test可能内置在您的 shell 中,但也应该在标准路径(如/bin.

您将能够在man test以及 shell 手册(因为它是内置实用程序)中阅读有关此测试和其他测试的更多信息。

此次-n测试也是其中之一标准测试,因此也列出在test实用程序的 POSIX 标准


如果这个循环应该循环结束全部shell 脚本的参数,如果参数为空,则可能无法执行此操作:

$ sh -c 'while [ -n "$1" ]; do printf "arg: %s\n" "$1"; shift; done' sh 1 2 3 "" 4 5 6
arg: 1
arg: 2
arg: 3

相反,它应该使用类似的东西

for arg do
    if [ -n "$arg" ]; then
        # do something with "$arg"
    fi
done

...显然取决于脚本的作用。

相关内容