linux - Bourne Shell - 如何识别第一个参数是 ''

标签 linux shell parameters sh

Bourne Shell 脚本如何知道它收到的第一个参数是''(两个单引号?

我试过了

if [ -z "$1" ] ; then
    echo "Wrong number of parameters"
fi

但似乎 $1 扩展为空字符串,"$1" 也是如此。

最佳答案

当您在命令行 shell 中键入 '' 时,会将其转换为参数 - 零长度字符串。 检查包含数字或参数的变量(在检查 -z "$1"之前)。

# check for any arguments
if [ "$#" -eq 0 ]; ...
# or -- has arguments and first one is ''
if [ "$#" -gt 0 -a -z "$1" ]; ...

有关 INTEGER 比较测试(-eq、-gt 等),请参阅“man test”。

编辑(基于对问题的评论):

在 Windows 上(你使用什么 shell?)你必须检查 ''(两个字符)(我认为 cmd.exe 以这种方式传递它)。在 Linux 上,您的脚本获得字符串长度为零的参数。

if [\( "$#"-gt 0 -a -z "$1"\) -o "$1"= "''"]; ...

关于linux - Bourne Shell - 如何识别第一个参数是 '',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411965/

相关文章:

bash - 将 bash 脚本参数传递给子进程不变

c - 如何使用宏扩展作为编译指示的第一个标识符?

c++ - 在 Debian Jessie 上安装多个 g++ 工具链的最佳方法是什么

linux - 更改 gpio 值时通知

c++ - 函数原型(prototype)中的不同参数名称

powershell - 将参数传递到 Powershell

linux - Perf 跟踪调用函数

linux - 在 Swift (linux) 中链接 C 库及其支持库

java - 使用 nohup 运行 java jar 应用程序后无法执行 shell 脚本中的下一条语句

java - 从字符串中获取命令(密码)并设置为 Java 中 Unix 服务器的输入流(JSCH)