当前位置: 首页 > news >正文

如何在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[@]}
> 36a+=(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

相关阅读:

  • sh和Bash的区别
  • 2>&1是什么意思
  • 为什么我不能在脚本中使用“cd“来更改目录
  • 如何使用bash脚本并行运行多个程序
  • 为什么要使用xargs命令
  • xargs命令用法实例
http://www.lryc.cn/news/332049.html

相关文章:

  • doesn‘t contain a valid partition table
  • modprobe加载驱动模块时报错:modprobe: module xxx.ko not found in modules.dep
  • 游戏引擎中的粒子系统
  • 哈佛大学商业评论 -- 第二篇:增强现实是如何工作的?
  • 『python爬虫』巨量http代理使用 每天白嫖1000ip(保姆级图文)
  • 6-95 希尔排序(Java语言描述)
  • JAVA面试大全之分布式篇
  • qt各种锁使用讲解
  • 5.111 BCC工具之ext4dist.py解读
  • Rust 的 termion 库控制终端光标的位置
  • ADB(Android Debug Bridge)操作命令详解及示例
  • 书生浦语训练营2期-第二节课笔记作业
  • 【日常积累】指定ruby版本环境安装
  • SOC内部集成网络MAC外设+ PHY网络芯片方案:MII/RMII 接口与 MDIO 接口
  • 简单了解HTTP和HTTPS
  • 系列学习前端之第 9 章:一文搞懂 Node.js 和 nvm,掌握 npm
  • 超强命令行解析工具Apache Commons CLI
  • JAVAEE——多线程进阶,锁策略
  • 富文本编辑器Quill全套教程
  • Swift 代码注释的使用
  • 蓝桥杯—DS1302
  • nginx: 集群环境配置搭建
  • Linux:进程终止和等待
  • 一、next-auth 身份验证凭据-使用电子邮件和密码注册登录
  • 2.SpringBoot利用Thymeleaf实现页面的展示
  • devtool: ‘source-map‘ 和 devtool: ‘#source-map‘的区别
  • Flutter Boost 3
  • ElementUI响应式Layout布局xs,sm,md,lg,xl
  • 机器学习——典型的卷积神经网络
  • 速通数据结构与算法第四站 双链表