首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Bash命令中展开单引号内的变量?

问题 我想从一个 bash 脚本中运行一个包含单引号且单引号内有其他命令和一个变量的命令。 例如:repo forall -c '.......$variable "'" 如果我将变量的值直接替换进去,命令就能正常执行。 请告诉我哪里出了错。 回答 在单引号内,所有内容都会被原样保留,无一例外。...不要拼接由 Shell 解析的字符串 你应绝对避免通过拼接变量来构建 Shell 命令。这和 SQL 片段的拼接(导致 SQL 注入)一样是个坏主意!...通常情况下,可以在命令中设置占位符,并将命令与变量一起提供,以便调用者能从调用参数列表中接收它们 例如,以下做法非常不安全。...1 is: $1"' /bin/sh -c "$script" -- "$myvar" 注意在给 script 变量赋值时使用了单引号,这意味着其内容将被按字面意思使用,期间不会进行变量扩展或其他任何形式的解释

14910

Shell脚本攻略01-简介终端打印

 获取、设置日期及延时  调试脚本  函数和参数  将命令序列的输出读入变量  以不按回车键的方式获取字符”n”  运行命令直至执行成功  字段分隔符和迭代器...---- 在Bash中,每个命令或是命令序列是通过使用分号或换行符来分隔的。...[root@entel1 ~]# echo "welcome to the blog of Bash" welcome to the blog of Bash 只需要使用带双引号的文本,结合echo命令就可以将该文本在终端中打印出来...类似地,不带双引号的文本也可以得到同样的输出结果: [root@entel1 ~]# echo welcome to the blog of Bash welcome to the blog of Bash...,那就不要将其放入双引号中,或者你可以在其之前加上个特殊的转义字符(\)将!转义,就像这样: [root@entel1 ~]# echo hello world ! hello world !

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Shell 编程(1)

    脚本被被执行由两种方式: 将脚本作为sh命令的参数 作为独立的可执行文件执行 作为 sh 命令的参数时,脚本中的"#!/bin/bash"存在与否变得不重要。...单引号:原文输出 双引号:解析命令引用 在 bash 环境中,感叹号只能通过单引号包围来输出,因为默认情况下开启了使用感叹号引用内存中的历史命令的设置,可以使用 set +H 关闭该设置,此时就可以使用双引号包围输出...echo Hello,world; Hello,world #分号作为断行符被忽略了 目前这种情况下,使用单引号,可以输出分号,但是无法扩展变量,使用双引号又无法输出感叹号,所以 echo 命令克服各种疑难杂症的方法是...在 bash 中,使用预定义变量 $? 判断命令是否成功执行,如果"$?"的值为0则表示前一条命令正确执行,其他任意退出值均表示不能正确执行。...id user3 && useradd user3 && echo "user3" | passwd --stdin user3 || echo "user3 exists" & "&"表示将其前面的命令放入后台执行

    1K11

    shell编程知识点集锦

    如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。双引号”“是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。...不加引号: 不会将含有空格的字符串视为一个整体输出。如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。...针对shell变量,一般常量字符串使用单引号,包含有变量的则用双引号。 总之,尽量不要不加引号。 4.shell脚本中typeset的几点疑问 无选项的执行typeset作用是什么?...但是使用sh命令则会开启新的shell进程来执行指定的脚本,这样的话,父进程中的变量在子进程中就无法访问。参考如下代码: first.sh内容如下,访问了second.sh中的变量second。...6.shell中$()、反引号和${}的区别 $()和反引号“的作用相同,用于命令替换(command substitution),即完成引号里的命令行,将其结果替换出来,与变量替换差不多。

    1.6K10

    Shell编程详解

    Shell层 Shell是Linux系统的命令行解释器,它负责将用户输入的命令解释并执行 Linux系统上有多种Shell,其中最常用的是Bash Shell Bash Shell 提供了各种丰富的功能和处理能力...、*等 示例 双引号允许引用变量,变量会被解析 单引号不会解析变量,原样输出 #!...,需要将其添加到配置文件中 添加到用户配置文件 将环境变量添加到~/.bashrc或~/.bash_profile中(针对 Bash Shell) export JAVA_HOME=/usr/local...} # 调用函数 say_hello 6.2、带参数的函数   函数可以通过位置参数(1, 2, …)接收输入参数,类似于脚本中的参数。...使用当前Shell默认的解释器 脚本在当前Shell环境中运行,不会启动新的子Shell 脚本中的变量和修改会直接影响当前Shell环境 无需给脚本赋执行权限,只要有读权限即可 4、将脚本放入系统PATH

    14310

    shell基础教程4-变量详细讲解

    在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化。 按照系统规范,所有环境变量的名字均采用大写形式 。在将环境变量应用于用户进程程序之前,都应该用export命令导出定义。...通常环境变量被定义并保存在用户家目录下的.bash_profile文件或全局的配置文件/etc/profile中。...输出时用“$变量名”,取消时用“unset变量名”。 书写crond定时任务时要注意,脚本要用到的环境变量最好先在所执行的Shell脚本中重新定义。...这种方式比较适合于字符串中附带有变量及命令且想将其解析后再输出的变量定义。...希望变量值引用命令并获取命令的结果时就用反引号或$() 4.

    68520

    是不是Bash编程老司机,看完这10条细节就知道了

    实际上每个 Linux 进程都有许多预设的环境变量(运行 env 命令可查看),Bash 中对环境的变量的应用非常简单。...for i in `seq 1 10`; do echo $i; done 这里我想强调的是,通过反引号(即键盘上Tab键上方的按键,注意不是单引号)将 seq 命令的输出结果,嵌入了 for 循环中直接使用...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...活用 set 命令 在其他语言中,通常遇到错误的语句时,编译器就会报错并停止运行,但 Bash 不会。...这时就可以用 set -u 表示 Bash 不执行未定义的变量。 除了 -e 和 -u 之外,还有 set -x 表示每条命令执行之前必须先打印命令内容。

    1.1K71

    Bash 老司机也可能忽视的 10 大编程细节

    实际上每个 Linux 进程都有许多预设的环境变量(运行 env 命令可查看),Bash 中对环境的变量的应用非常简单。...for i in `seq 1 10`; do echo $i; done 这里我想强调的是,通过反引号(即键盘上Tab键上方的按键,注意不是单引号)将 seq 命令的输出结果,嵌入了 for 循环中直接使用...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...活用 set 命令 在其他语言中,通常遇到错误的语句时,编译器就会报错并停止运行,但 Bash 不会。...这时就可以用 set -u 表示 Bash 不执行未定义的变量。 除了 -e 和 -u 之外,还有 set -x 表示每条命令执行之前必须先打印命令内容。

    88060

    拥有此神技,脚本调试从此与 echo、set、test 说分手!

    所以 Bash 脚本只要关注的是脚本中调用的命令是否能够成功执行,以及命令输出了哪些,并决定随后执行脚本中的哪些不同分支逻辑。...什么样的测试才是 Bash 脚本的单元测试? 首先,所有存在于PATH环境变量的路径中的命令都不应该在单元测试中被执行。对 Bash 脚本来说,被调用的这些命令可以正常运行,有返回值,有输出。...然后我们就可以执行真正的命令了,将find命令的输出结果传递给xargs命令,并组合到rm -rf命令之后。...我们都知道,对于含有特殊字符的文件名是要放入到双引号中的。现在这个这个 cleanup 的实现里面没有使用双引号,但是传参的时候使用了双引号,那是否还会按照我们的预期来执行呢?...现在修复函数cleanup,把变量$1放入双引号: function cleanup() { rm -rf "$1" } 再次执行测试,会发现确实执行的是命令rm -rf "bar*"。

    1K20

    Linux Shell编程入门

    这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是: echo "Hi, ${a}s" 单引号中的变量不会进行变量替换操作。...第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.2K10

    shell脚本中一些注意事项

    A: 1.1 source命令用法: source FileName 作用:在当前 bash 环境下读取并执行 FileName 中的命令。该 filename 文件可以无 "执行权限"。...注:该命令通常用命令 . 来替代。 1.2 sh、bash的命令用法: sh FileName或 bash FileName 作用:打开一个子 shell 来读取并执行 FileName 中命令。...单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。...Q: 一个read命令 A: read命令的一般语法形式是: read [-options][variable...] 以下实例读取键盘输入的内容并将其赋值给shell变量: ?...以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: ? 输出的结果如下: ? 可以发现,单引号中的内容会直接原样输出来,如果想实现拼接的功能,需要我们使用单引号引起来。

    1.2K20

    linux学习-bash shell 编程

    bash 或 find / -name bash 2>/dev/null或whereis bash 三个命令找出bash所在位置,如果没有需要自己安装bash安装包 bash中绝大多数语句没有分号 如何执行.../hello.sh bash被执行实际是linux另外开了一个进程来运行的。 变量 script 设置的变量名称: $0 /path/scriptname 命令名称,$1......为Esc下方的`,而不是单引号' let表示数学运算,expr用于整数值运算,每一项用空格隔开,$[]将中括号内的表达式作为数学运算先计算结果再输出。...如果不加引号,带空格的参数会被截断 Shell里的一些特殊符号 1.* :通配符,可以使用双引号和单引号防止扩展....调试 sh [-nvx] scripts.sh -n :不要执行 script,仅查询语法的问题; -v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上; -x :将使用到的

    3.8K50

    Bash 脚本中,特殊变量$0到底是什么?

    图片在 Bash 脚本中,$0 变量通常用于以下情况:1. 显示脚本的名称和路径可以使用 $0 变量来显示脚本的名称和路径。通常,这种情况下,我们使用 echo 命令来输出脚本的名称和路径。.../bin/bashecho "当前脚本的名称是 `$0`"echo "当前脚本的路径是 $(dirname "`$0`")"在这个例子中,dirname 命令将输出 $0 路径中的目录部分,而 echo...命令将输出 $0 变量中的文件名部分。...关于 $0 变量的注意事项$0 变量总是包含脚本的路径和名称,包括相对路径和绝对路径。在 Bash 脚本中,$0 变量是只读变量,不能被修改。在使用 $0 变量时,需要小心空格和引号。...如果在使用 $0 变量时将其括在引号中,则需要使用双引号而不是单引号。否则,Bash 将不会展开它,并输出整个字符串。$0 变量也可以用于获取命令行参数中的程序名称。例如,如果我们执行以下命令:.

    2.6K00

    Shell编程实战

    Shell是一个命令解释器,它的作用是解释并执行用户输入的命令和程序等,用户每输入一条命令,Shell解释器就执行一条,存在一种交互的方式。...什么是Shell脚本 当命令或者程序语句不是在命令行中执行,而是通过一个程序文件来执行时,这个程序就称作Shell脚本。.../scriptName 此方法需要脚本有可执行权限,chmod +x scriptName source scriptName . scriptName 加载并执行脚本文件中的命令和语句 [root...Shell通过环境变量来确定命令提示符,也就是超哥前面说的PS1变量 环境变量可以在命令行中设置和创建,但是用户退出命令行时变量值就会丢失,因此可以写入/etc/profile文件中,每次用户登录时,变量都会被初始化...,单引号字符串中的变量无效 单引号字符串不能出现单一的单引号,转义符也不可用,可用作字符串拼接 双引号 双引号里可以用变量 双引号可以有转义符 [root@oldboy_python ~ 11:45:01

    1K30

    linux基础(day24)

    管道符的使用 管道符 | ,表示把前面命令输出的结果,传输给后面的命令 cat 1.txt |wc -l ;cat 1.txt |grep 'aaa' grep 命令,用来过滤指定关键词的命令...,把任务调到前台并执行——>不加id号就是执行最后一次的任务(加id就是指定任务) 可以选择执行的任务 [root@localhost ~]# fg 1 bg [id] 命令,把任务调到后台并执行...,所以为空 当变量或表达式较为复杂的时候,变量叠加的时候,可以使用双引号将它们标记起来 全局变量 全局变量 export b=2 w命令,用于显示已经登陆系统的用户列表,并显示用户正在执行的指令 非全局变量....bash_logout PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$ ' //带颜色显示命令行左边 系统的环境变量配置文件....bash_profile 加载配置文件中的配置 ~/.bash_logout 文件,用来定义用户退出的时候需要做的一些操作 PS1是在/etc/bashrc中定义的 在登录一个系统之后,

    54410

    Linux Shell编程零基础入门

    第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。...在第二十三行中,backtick(`)的作用是取出两个backtick之间的命令输出结果,在这里,也就是将结果取出赋给变量 newfile。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.2K10

    Linux Shell编程入门

    第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。...在第二十三行中,backtick(`)的作用是取出两个backtick之间的命令输出结果,在这里,也就是将结果取出赋给变量 newfile。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    1.4K20

    Linux Shell编程入门

    第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。...在第二十三行中,backtick(`)的作用是取出两个backtick之间的命令输出结果,在这里,也就是将结果取出赋给变量 newfile。...有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。...第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。 sh ?...x filename.sh 这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

    3.8K20

    Shell 快速指南

    这样写还有一个好处,操作系统的PATH变量有可能被配置为指向程序的另一个版本。比如,安装完新版本的bash,我们可能将其路径添加到PATH中,来“隐藏”老版本。如果直接用#!...非交互模式 简单来说,你可以将 shell 的非交互模式理解为执行 shell 脚本。 在非交互模式下,shell 从文件或者管道中读取命令并执行。...可以使用下面的命令让shell以非交互模式运行: sh /path/to/script.sh bash /path/to/script.sh 上面的例子中,script.sh是一个包含shell解释器可以识别并执行的命令的普通文本文件...在双引号中,变量引用或者命令置换是会被展开的。在单引号中是不会的。...管道给了我们创建传送带的机会,控制程序的执行成为可能。 学习如何使用这些强大的、高级的工具是非常非常重要的。 输入、输出流 Bash接收输入,并以字符序列或 字符流 的形式产生输出。

    3.4K101

    《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用

    shell 包含几十条内部命令。在 bash 环境下,输入 help 命令(这也是一条内部命令),就可列出bash的所有内部命令。...系统的基本环境变量放在/etc/profile中, 用户环境变量放在用户主目录下的.profile文件中, 用户shell启动时, 先执行/etc/profile, 再执行用户主目录下的.profile...当字符串中带空白符或其它控制字符时,用引号将其括起来。...定义变量B, (字符串中有空格时用引号) echo B 引用变量B的值 this is a string (变量B的值) (6) 清除变量 当某个shell变量不再使用时,可以将其清除。...,再把命令执行的结果(输出)加以利用。

    27310
    领券