`

Bash字符串处理(与Java对照) - 7.字符串与默认值

阅读更多

Bash字符串处理(与Java对照) - 7.字符串与默认值

In Java

StringUtils.defaultString

在字符串为null的时候,返回默认值为""或者指定的字符串。主要是为了避免检查null对象。

org.apache.commons.lang.StringUtils defaultString方法 写道
public static String defaultString(String str)

Returns either the passed in String, or if the String is null, an empty String ("").

StringUtils.defaultString(null) = ""
StringUtils.defaultString("") = ""
StringUtils.defaultString("bat") = "bat"


Parameters:
str - the String to check, may be null
Returns:
the passed in String, or the empty String if it was null

public static String defaultString(String str, String defaultStr)

Returns either the passed in String, or if the String is null, the value of defaultStr.

StringUtils.defaultString(null, "NULL") = "NULL"
StringUtils.defaultString("", "NULL") = ""
StringUtils.defaultString("bat", "NULL") = "bat"


Parameters:
str - the String to check, may be null
defaultStr - the default String to return if the input is null, may be null
Returns:
the passed in String, or the default if it was null

 

StringUtils.defaultIfEmpty

在字符串为null或者空串时,返回指定的默认值。

org.apache.commons.lang.StringUtils defaultIfEmpty方法 写道
public static String defaultIfEmpty(String str, String defaultStr)

Returns either the passed in String, or if the String is empty or null, the value of defaultStr.

StringUtils.defaultIfEmpty(null, "NULL") = "NULL"
StringUtils.defaultIfEmpty("", "NULL") = "NULL"
StringUtils.defaultIfEmpty("bat", "NULL") = "bat"
StringUtils.defaultIfEmpty("", null) = null


Parameters:
str - the String to check, may be null
defaultStr - the default String to return if the input is empty ("") or null, may be null
Returns:
the passed in String, or the default
 

StringUtils.defaultIfBlank

在字符串为null,空串或者空白串的时候,返回指定的默认值。

org.apache.commons.lang.StringUtils defaultIfBlank方法 写道
public static String defaultIfBlank(String str, String defaultStr)

Returns either the passed in String, or if the String is whitespace, empty ("") or null, the value of defaultStr.

StringUtils.defaultIfBlank(null, "NULL") = "NULL"
StringUtils.defaultIfBlank("", "NULL") = "NULL"
StringUtils.defaultIfBlank(" ", "NULL") = "NULL"
StringUtils.defaultIfBlank("bat", "NULL") = "bat"
StringUtils.defaultIfBlank("", null) = null


Parameters:
str - the String to check, may be null
defaultStr - the default String to return if the input is whitespace, empty ("") or null, may be null
Returns:
the passed in String, or the default

 

In Bash

在学习Bash多年以后,我终于记住了以下几个参数扩展方法,关键点在于有没有冒号(:)。虽然这些默认值替换方法也可以用if语句罗嗦的解决掉,但远没有这些方法来的简洁。

 

Use Default Values: ${parameter-default}, ${parameter:-default}

${parameter-default} -- 如果变量parameter没被声明, 那么就使用默认值.
${parameter:-default} -- 如果变量parameter没被设置, 那么就使用默认值.
注:“(没)被声明”与“(没)被设置”在是否有 “:” 号的句式差别中仅仅是触发点的不同而已。

“被声明”的触发点显然要比“被设置”的要低,

“被设置”是在“被声明”的基础上而且不能赋值(设置)为空(没有赋值/设置为空)。

man bash 写道
${parameter:-word}
Use Default Values. If parameter is unset or null, the expansion of word is substituted. Otherwise,
the value of parameter is substituted.

omitting the colon results in a test only for a parameter that is unset.
 

用途:常用来指定命令行参数的默认值。

比如:DIR=${1:-/root}  意思是说,当第一个命令行参数没有或者为空时,默认值为/root。

比如:DIR=${1-/root}  当没有参数时(第一个命令行参数没有声明,当然就是没有参数),默认值为/root。

 

Assign Default Values: ${parameter=default}, ${parameter:=default}

${parameter=default} -- 如果变量parameter没被声明, 那么就把它的值设为default.
${parameter:=default} -- 如果变量parameter没被设置, 那么就把它的值设为default.

 

man bash 写道
${parameter:=word}
Assign Default Values. If parameter is unset or null, the expansion of word is assigned to parameter.
The value of parameter is then substituted. Positional parameters and special parameters may not be
assigned to in this way.
 

 

: ${parameter:=default}

注意前面加上了冒号(:),即空命令,等同于下面的写法:

if [ -z "$parameter" ]; then parameter=default; fi

[ -z "$parameter" ] && parameter=default

 

Use Alternate Value: ${parameter+alt_value}, ${parameter:+alt_value}

${parameter+alt_value} -- 如果变量parameter被声明了, 那么就使用alt_value, 否则就使用null字符串.
${parameter:+alt_value} -- 如果变量parameter被设置了, 那么就使用alt_value, 否则就使用null字符串.

man bash 写道
${parameter:+word}
Use Alternate Value. If parameter is null or unset, nothing is substituted, otherwise the expansion of
word is substituted.
 

 

Display Error if Null or Unset: ${parameter?err_msg}, ${parameter:?err_msg}

${parameter?err_msg} -- 如果parameter被声明了, 那么就使用设置的值, 否则打印err_msg错误消息.
${parameter:?err_msg} -- 如果parameter被设置了, 那么就使用设置的值, 否则打印err_msg错误消息.

 

man bash 写道
${parameter:?word}
Display Error if Null or Unset. If parameter is null or unset, the expansion of word (or a message to
that effect if word is not present) is written to the standard error and the shell, if it is not inter-
active, exits. Otherwise, the value of parameter is substituted.
 

用途1:判断环境变量是否设置了

: ${HOME?}

用途2:判断某些变量是否设置了

: ${VAR?}

用途3:判断位置参数是否设置了

: ${1?}

 

示例:某脚本接受一个参数,如果没有提供就打印使用帮助并退出(注意冒号的使用)。

#!/bin/sh

: ${1?usage: $0 <file>}
 

[root@jfht ~]# ./test1.sh
./test1.sh: line 3: 1: usage: ./test1.sh <file>

[root@jfht ~]# ./test1.sh 1.txt
[root@jfht ~]#

 

如果你对空命令(冒号)还不是很了解,请参见“我使用过的Linux命令之:(冒号) - 啥也不做(除了……) ”。

 

 

本文链接:http://codingstandards.iteye.com/blog/1172191   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 6.判断字符串是否为空(不为空)

下节内容:Bash字符串处理(与Java对照) - 8.计算字符串长度

 

 

5
4
分享到:
评论
1 楼 superlittlefish 2011-10-08  
一直都记不住,不知道楼主有什么好办法.

相关推荐

    Python库 | configuration_resolver-0.0.11-py3-none-any.whl

    在项目开发过程中,配置文件往往包含了如数据库连接字符串、API密钥、服务器地址等关键信息,正确解析和管理这些配置对于程序的稳定运行至关重要。 “configuration_resolver-0.0.11-py3-none-any.whl”是一个...

    Python库 | webargs-0.5.0-py2.py3-none-any.whl

    例如,你可以定义一个名为 `username` 的参数,要求其为非空字符串。 ```python from webargs import fields arg_schema = { 'username': fields.Str(required=True) } ``` 3. **错误处理**:如果参数不符合定义...

    Python库 | plac-0.9.4-py2.py3-none-any.whl

    `plac`还支持各种复杂的参数类型,包括布尔型、整数、浮点数、字符串、文件路径等,并且可以自定义参数的解析规则。此外,它还有很好的错误处理机制,当用户输入的参数不符合预期时,`plac`会给出清晰的错误提示。 ...

    PyPI 官网下载 | django-environ-0.3.1.tar.gz

    该库还支持类型检查和自动转换,这意味着你可以设置环境变量为特定的数据类型,如字符串、整数、浮点数、布尔值等,它会自动将这些环境变量转换为Django配置所需的格式。 3. **默认值** 除了从环境变量中获取...

    Python库 | dataclasses_json-0.2.11-py3-none-any.whl

    在这个例子中,`@dataclass_json`使得Person类具备了`to_json()`和`from_json()`方法,实现了数据类到JSON字符串的转换以及JSON字符串到数据类实例的还原。 此外,dataclasses_json库还支持自定义编码和解码逻辑,...

    Python库 | dataclass_csv-1.0.0-py2.py3-none-any.whl

    "dataclass_csv"库的优势在于它自动处理类型转换,这意味着CSV文件中的字符串会被自动转换为相应的Python类型(如整数、浮点数等)。此外,它还支持自定义的类型转换器和字段解析逻辑,以满足更复杂的需求。 在开发...

    PyPI 官网下载 | inicheck-0.2.0-py2.py3-none-any.whl

    2. **类型检查**:自动验证配置项的数据类型,如字符串、整数、浮点数等。 3. **默认值与必需项**:可以指定某些配置项为必需,或者提供默认值,以确保配置的完整性。 4. **限制与范围检查**:可以设置值的范围限制...

    Python库 | fileconfig-0.5.1-py2.py3-none-any.whl

    3. **自动类型转换**:`fileconfig`能够根据配置项的值自动进行类型转换,例如将字符串类型的配置值转换为整数或浮点数,无需手动进行类型检查和转换。 4. **环境变量支持**:除了从配置文件中读取值,`fileconfig`...

    Python库 | scopt-0.0.3-py3-none-any.whl

    2. 自动类型转换:库可以自动将用户输入的字符串转换为预期的数据类型,如整数、浮点数、布尔值等。 3. 必需选项与默认值:开发者可以指定某些选项为必需,或者为其设置默认值,这样在用户未提供这些选项时,程序...

    PyPI 官网下载 | layered_config-2.0.3-py3-none-any.whl

    `layered_config`库还支持类型检查和验证,这意味着开发者可以指定配置项应该是什么类型的值,如字符串、整数或布尔值。如果用户提供不匹配的值,库会抛出异常,从而帮助确保配置的正确性。 总之,`layered_config`...

    Python库 | skema-0.0.15.tar.gz

    例如,你可以定义一个包含姓名(字符串类型,必填)和年龄(整数类型,可选)的用户模型。 2. **数据验证**:一旦定义了数据模型,skema可以对输入数据进行验证,检查其是否符合模型规则。如果数据不符合规则,它会...

    Python库 | neoconfigen-2.1.0-py3-none-any.whl

    3. **环境变量集成**:很多现代应用提倡使用环境变量来管理敏感信息,如API密钥或数据库连接字符串。neoconfigen可能有功能将这些环境变量与配置文件相结合。 4. **验证和类型转换**:库可能包含验证功能,确保配置...

    Python库 | safetywrap-1.2.0-py3-none-any.whl

    3. **安全编码实践**:库可能包含了一些遵循安全编码原则的函数或类,比如安全的字符串操作、数据加密和解密等,以减少安全漏洞的出现。 4. **依赖管理**:`safetywrap`可能具备检查和管理项目依赖的功能,确保所...

    Python库 | jsonargparse-4.0.0-py3-none-any.whl

    它能够自动检测并转换数据类型,例如字符串转整数或浮点数。 4. **递归结构处理**:库能够处理嵌套的JSON结构,这对于配置复杂的软件项目非常有用。你可以定义嵌套的参数组,使配置层次清晰。 5. **自动文档生成**...

    Python库 | load_config-0.2.0b6-py3-none-any.whl

    配置文件通常包含应用程序的设置,如数据库连接字符串、API密钥或环境变量,使得这些信息可以外部化,便于维护和跨环境部署。 轮子文件(.whl)的格式是Python包索引(PyPI,Python Package Index)上推荐的分发...

    Python库 | redata-0.2.0-py3-none-any.whl

    2. **数据类型转换**:帮助用户将数据列转换为合适的类型,如将字符串转换为日期、数字等。 3. **异常值检测和处理**:检测超出正常范围的数据值,可以进行删除、替换或标记。 4. **重复值处理**:识别并处理数据...

    Python库 | types_attrs-0.1.1-py2.py3-none-any.whl

    4. **自动生成文档**:`types_attrs`可以根据类定义自动生成有用的文档字符串,这在生成API文档时特别有用。 5. **序列化与反序列化**:`types_attrs`提供了一种简单的方法将对象序列化为字典,以及从字典反序列化...

    Python库 | typed_json_dataclass-1.0.0-py3-none-any.whl

    1. **类型注解的JSON序列化和反序列化**:`typed_json_dataclass` 可以将一个带有类型注解的数据类实例转换成JSON字符串,同时也能够将JSON字符串解析回相应的数据类实例。这样可以避免在处理JSON数据时出现类型错误...

    Python库 | schemed_yaml_config-1.0.1-py3-none-any.whl

    2. **类型转换**:除了验证外,`schemed_yaml_config`还能够自动将YAML文件中的值转换为Python内建类型,如字符串、整数、浮点数、布尔值等,甚至可以处理更复杂的类型如列表、字典等。 3. **默认值与约束**:...

    shell 字符串操作

    Shell提供了多种方式来处理字符串值,包括判断变量是否存在、获取默认值等。这些操作通常用于确保脚本在面对不同输入时能够稳定运行。 **1. 变量值的基本获取** - **${var}**: 获取变量`var`的值,与`$var`相同。 ...

Global site tag (gtag.js) - Google Analytics