bash - shell脚本中的命令在线参数
问题描述
嗨,我编写了小 shell 脚本,我无法理解该脚本的行为。任何人都可以帮助我理解该脚本。
脚本:
#!/bin/bash
if [ -z $1 ]
then
echo "fail"
else
echo "success"
fi
在执行脚本时。
./test.sh one
即使它传递了参数,它也会执行 else 语句而不是 main 语句。
谁能解释我这种行为来理解
解决方案
bash 中的-z
测试是检查字符串是否为空(零长度)值。
由于您向脚本传递的参数$1
不是空的,因此-z $1
计算结果为false
,因此执行else
脚本的一部分。
旁注:由于您使用的是字符串,我建议您如下引用变量:
if [ -z "$1" ]; then
echo "String is empty / No argument given"
else
echo "String is not empty / Argument given"
fi
编辑:正如user1934428所指出的,使用它可能会更好,[[
而不是[
. 除其他外,这消除了引用的需要。在此处查看更多差异。
if [[ -z $1 ]]; then
...
但是,请注意,这是一个 bash 扩展,在 sh 脚本中不起作用。
推荐阅读
- c# - 如何在格式化时自动移动命名空间内的 using 指令?
- c++ - Node.js 节点 API。.cpp 本机 C++ 模块中的错误会破坏 javascript 应用程序。如何正确捕获错误
- linux - 字符不会在 HISTTIMEFORMAT 中转义
- javascript - ReactJS:将兄弟组件数据传递给条件组件
- javascript - 从动态数据透视表 (MSQL) 到 Google 图表
- vue.js - 通过计算道具访问对象时,对象的属性未定义
- excel - 找不到问题出在哪里:运行时错误“1004”应用程序定义或对象定义错误
- html - nativescript 角度模板形式 *ngif 不起作用
- javascript - 为什么我无法访问使用“new Array”构造函数创建的二维数组的 [0][0] 位置?
- python - Python,尝试使用 matplotlib 显示占用网格。但是y轴为负