如何在Bash中连接字符串变量

问题:

在 PHP 中,字符串按如下方式连接在一起:

$foo = "Hello";
$foo .= " World";

在这里,$foo 变成了 "Hello World"

在 Bash 中如何实现这一点?


回答1:

foo="Hello"
foo="${foo} World"
echo "${foo}"
> Hello World

一般来说,要连接两个变量,你可以将它们一个接一个地写:

a='Hello'
b='World'
c="${a} ${b}"
echo "${c}"
> Hello World

回答2:

由于这个问题是专门针对 Bash 提出的,我的第一部分回答将提出正确处理这一问题的不同方法:

+= : 附加到变量

语法 += 可以以不同的方式使用:

  • 附加到字符串 var+=...
    (因为我很节俭,我只会使用两个变量 fooa,然后在整个答案中重复使用它们。)
a=2
a+=4
echo $a
> 24

使用 Stack Overflow 的问题语法:

foo="Hello"
foo+=" World"
echo $foo
> Hello World

  • 追加到一个整数 ((var+=...))
    变量 a 是一个字符串,但也是一个整数。
echo $a
> 24
((a+=12))
echo $a
> 36

  • 追加到数组 var+=(...)
    我们的 a 是一个只有一个元素的数组。
echo ${a[@]}
> 36

a+=(18)

echo ${a[@]}
> 36 18
echo ${a[0]}
> 36
echo ${a[1]}
> 18

请注意,括号之间有一个空格分隔的数组。如果要在数组中存储包含空格的字符串,则必须将它们括起来:

a+=(one word "hello world!" )

printf:使用内置命令重新构造变量

printf 内置命令提供了一种强大的绘制字符串格式的方法。由于这是一个 Bash 内置程序,因此可以选择将格式化字符串发送到变量,而不是在 stdout 上打印:

echo ${a[@]}
> 36 18 one word hello world!

这个数组中有五个字符串。因此,我们可以构建一个包含五个位置参数的格式化字符串:

printf -v a "%s./.%s...'%s' '%s', '%s'" "${a[@]}"
echo $a
> 36./.18...'one' 'word', 'hello world!'

或者,我们可以使用一个参数格式字符串,该字符串将随着提交的参数数量而重复 …
请注意,我们的 a 仍然是一个数组!只有第一个元素改变了!

declare -p a
> declare -a a=([0]="36./.18...'one' 'word', 'hello world!'" [1]="18" [2]="one" [3]="word" [4]="hello world!")

在 bash 下,当你在不指定索引的情况下访问变量名时,你总是只寻址第一个元素!
因此,要找回我们的五字段数组,我们只需要重新设置第一个元素:

a=36
declare -p a
> declare -a a=([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!")

使用 Stack Overflow 的问题语法:

foo="Hello"
printf -v foo "%s World" $foo
echo $foo
> Hello World

注意: 双引号在处理包含空格、制表符和/或换行符的字符串时很有用

printf -v foo "%s World" "$foo"


参考:

  • stackoverflow question 4181703
  • help printf
  • help declare

相关阅读:

相关推荐

  1. 如何Bash连接字符串变量

    2024-04-02 05:22:02       32 阅读
  2. Bash如何提取子字符串

    2024-04-02 05:22:02       38 阅读
  3. 如何Bash比较数字

    2024-04-02 05:22:02       46 阅读
  4. 如何PHP声明一个变量

    2024-04-02 05:22:02       66 阅读
  5. Go语言如何使用变量

    2024-04-02 05:22:02       27 阅读
  6. 去除Bash 变量的空白字符 —— 筑梦之路

    2024-04-02 05:22:02       61 阅读
  7. 如何前端展示后端返回的pdf Base64格式字符串

    2024-04-02 05:22:02       28 阅读
  8. C 打印字符串 - 如何 C 打印字符串

    2024-04-02 05:22:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 05:22:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 05:22:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 05:22:02       87 阅读
  4. Python语言-面向对象

    2024-04-02 05:22:02       96 阅读

热门阅读

  1. 「PHP系列」数组详解

    2024-04-02 05:22:02       39 阅读
  2. C#WPF自定义控件-继承Button的圆角按钮

    2024-04-02 05:22:02       31 阅读
  3. pytorch剪枝

    2024-04-02 05:22:02       40 阅读
  4. 影视站点为何需要多IP服务器

    2024-04-02 05:22:02       35 阅读
  5. UltraScale系列底层结构(1)——引言

    2024-04-02 05:22:02       37 阅读
  6. 技术与安全的交织

    2024-04-02 05:22:02       39 阅读
  7. spring AOP和AspectJ AOP的区别

    2024-04-02 05:22:02       34 阅读
  8. 零基础10 天入门 Web3之第2天

    2024-04-02 05:22:02       36 阅读
  9. HarmonyOS 应用开发之XML生成、解析与转换

    2024-04-02 05:22:02       27 阅读
  10. 1.创建型模式--单例模式

    2024-04-02 05:22:02       37 阅读