`
Luob.
  • 浏览: 1589916 次
  • 来自: 上海
社区版块
存档分类
最新评论

Linux shell变量里的字符替换

 
阅读更多
shell变量里的字符替换 (2008-11-11 09:29:17)转载▼

b=${a/123/321};将${a}里的第一个123替换为321
b=${a//123/321};将${a}里的所有123替换为321
shell调试:
sh -x aaa.sh

from:
http://bbs.chinaunix.net/viewthread.php?tid=218853&extra=&page=7#pid1628522
shell十三问
不過,假如你只看到 ${ } 只能用來界定變量名稱的話,那你就實在太小看 bash 了﹗
有興趣的話,你可先參考一下 cu 本版的精華文章:
http://www.chinaunix.net/forum/viewtopic.php?t=201843

為了完整起見,我這裡再用一些例子加以說明 ${ } 的一些特異功能:
假設我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 .  及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 .  及其左邊的字串:txt
${file%/*}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}:拿掉最後一個 .  及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 .  及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。

${file:0:5}:提取最左邊的 5 個字節:/dir1
${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2

我們也可以對變量值裡的字串作替換:
${file/dir/path}:將第一個 dir 提換為 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt

利用 ${ } 還可針對不同的變數狀態賦值(沒設定、空值、非空值): 
${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理) 
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理)
${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)

tips:
以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態.
一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.


還有哦,${#var} 可計算出變量值的長度:
${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個字節...
分享到:
评论

相关推荐

    Linux之Shell的变量设置.doc

    Linux Shell 变量设置知识点详解 Linux Shell 变量设置是一种非常重要的技术,在 Linux 中,每个用户登录系统之后都会有一个属于自己的 bash shell,每个人都能够使用 bash 执行命令来收取自己的邮箱,但是 bash 是...

    linux运维学习笔记:Shell变量.pdf

    Linux Shell变量知识点: 1. 变量概念: 在Linux Shell编程中,变量是存储数据的基本单元。变量可以看作是一个容器,用于临时存储字符串、数字等数据类型,包括但不限于路径、命令结果等。变量通过赋值操作符“=”...

    linux实验六 shell变量

    ### Linux实验六 Shell变量知识点详解 #### 一、实验目的 1. **熟悉Shell变量**: - Shell变量是Shell编程中的基本概念之一,用于存储数据。这些数据可以是文件名、数字或文本字符串。 - 变量分为两种类型:用户...

    LinuxShell编程基础教程.pdf

    本资源为 Linux Shell 编程基础教程,涵盖了 Linux Shell 编程的基础知识,包括语法基本介绍、变量、环境变量、Shell 命令和流程控制等。 一、语法基本介绍 在 Linux Shell 编程中,必须以#!开头,指定解释器的...

    Linux-shell脚本全面学习.pdf

    * 在 shell 编程中,所有的变量都是字符串组成的 * 不需要对变量进行声明 * 赋值给一个变量的方法: `a="hello world"` * 使用花括号来告诉 shell 我们要打印的是哪个变量: `echo "this is the ${num}nd"` 1.1.4 ...

    shell 批量处理 字符串指令行

    这篇博客“shell批量处理字符串指令行”可能探讨了如何利用shell的特性来处理字符串,包括查找、替换、截取等操作。 首先,让我们了解一些基本的shell字符串处理命令: 1. **变量赋值**:在shell中,我们可以通过`...

    Linux-Shell特殊字符和控制字符大全

    ### Linux Shell 特殊字符和控制字符详解 #### 一、Shell特殊字符 Shell特殊字符在Linux Shell编程中起着非常重要的作用,它们用于控制Shell的行为、格式化输出以及进行各种复杂的操作。以下是对给定内容中提到的...

    linux shell 编程经典 教程

    Shell脚本支持正则表达式用于字符串匹配和替换,如在find、grep等命令中使用。 八、脚本实例 通过实际案例,例如创建一个备份脚本、定时任务脚本或者日志分析脚本,来练习和理解Shell编程。 通过学习《LINUX与UNIX...

    Linux Shell 编程实战.zip

    Shell是Linux的外壳,是Linux的用户界面, Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。用户对Shell理解越深刻, Shell对用户工作的支持就越有力。...shell变量 流程控制 子程序

    Linux shell脚本的补充

    本文将深入讲解Linux shell脚本的几个核心知识点,包括Shebang、变量、作用域、特殊参数变量、状态变量、内置命令、字符串操作以及文件管理。 首先,Shebang(#!/bin/bash)是shell脚本的第一行,它指定了脚本应...

    linux中shell变量.pdf

    在Linux环境中,Shell脚本是自动化任务和管理系统操作的强大工具。在Shell脚本中,有若干内置变量,这些变量在...总的来说,理解并熟练运用这些Linux Shell变量和命令重定向对于编写自动化脚本和管理日常任务至关重要。

    深入_Shell_变量操作

    深入探讨Shell变量操作:变量替换扩展与字符串处理 在Linux Shell编程中,变量操作是构建高效、灵活脚本的关键技能之一。本文将深入探讨Shell变量的高级操作技巧,特别是变量替换扩展和字符串处理,旨在帮助读者...

    Linux Shell Scripting Cookbook Second Edition

    Shell脚本能够处理多种文本和数据,包括字符串和数字的比较、文件的读写、文本的搜索和替换等。这些操作在进行数据处理和日志分析时尤为重要。同时,Shell脚本也能够执行系统管理任务,如监控系统状态、自动化安装...

    Linux Shell 参考文档

    4. 引号的使用:单引号`' '`和双引号`" "`对字符串有不同的处理方式,单引号内的内容不会进行变量替换。 5. Shell函数:可以创建自定义的函数,提高代码复用性。 6. 正则表达式:在某些命令中,如`grep`,支持正则...

    LinuxShell编程全攻略

    变量的取值都是字符串类型,并且在引用变量时需要使用美元符号($)作为前缀,例如,若有一个变量名var,其内容可通过$var来引用。 在Shell中,还定义了环境变量,这些变量是预设的,并与系统的运行环境相关。例如...

    尚官Linux Shell 编程实战

    Shell是Linux的外壳,是Linux的用户界面, Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。用户对Shell理解越深刻, Shell对用户工作的支持就越有力。...shell变量 流程控制 子程序

    linuxshell.rar帮助文档 简单实用

    这份“linuxshell.rar帮助文档”旨在提供关于Linux Shell的基础知识和实用技巧,帮助用户提高在终端中的操作效率。 一、Shell简介 Linux Shell是Linux系统中的一个核心组件,常见的有Bash(Bourne Again SHell)、...

    linux shell

    二、Shell变量 1. 环境变量:全局变量,对所有子进程可见,如`PATH`定义可执行文件搜索路径,`HOME`表示用户的主目录。 2. 位置参数变量:在脚本中,`$1`到`$9`代表传递给脚本的前九个参数,`$@`和`$*`表示所有参数...

    linux Shell 编程实例书一本

    2. **变量与数据类型**:学习如何声明和使用变量,包括字符串、整数、数组等数据类型,以及变量赋值、引用和环境变量的管理。 3. **条件语句与循环结构**:掌握if、elif、else条件判断,以及for、while、until循环...

Global site tag (gtag.js) - Google Analytics