#!/bin/bash
#$@与$*没有被双引号包围时效果一样,每个参数都是独立的。但是$*被双引号包围时,会将所有参数看作一个整体。
echo "\$@和\$*没有被双引号包围时,每个参数依然是独立的"for i in"$@";doecho "\$@ $i"
donefor i in $*;do echo "\$* $i"
doneecho "\$*被双引号包围时,会将所有参数看作一个整体。"for i in"$*";do echo "\"\$*\" $i"
done#脚本的执行名字
echo "\$0 NAME: $0"
#执行这个脚本的PID
echo "\$$ PID: $$"...
引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(’‘),双引号(“”)。 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要用于信息的原样输出,防止任何变量的扩展,双引号(软转义)允许变量扩展、转义符和命令替换。单引号保护双引号,双引号保护单引号。1. 反斜杠 反斜杠通过解析器将1个字符转化为引用符号或转义。 1)在单引号内...
在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别,
所以就整理一下供以后脑子不好使了的时候前来复习一下。首先说下他们的共同点: 好像就只有
一个,就是它们都可以用来界定一个字符串,这个没什么好解释的,真正需要记住的是它们区别,
所以经过整理后,它们的区别主要包括:
1)、单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用,唯一需要注...
我在rhel5上,遇到以下问题:我有一个函数,用我想要的文本替换给定行中的所有内容.一切正常,直到我需要放置双引号.以下是代码:ReplaceLine()
{txnFile="File.xml"if [ "$2" == "enable" ];thenreplace="<ref bean=\\"$3\\"/>"elsereplace="<!--<ref bean=\\"$3\\"/>-->"fised -i "$1s/.*/$replace/" $txnFile
}$1=line number
$2=enable/disable
$3=string to be put当前代码用以下代码替换文件中的给定行:<ref bean=beginEventB...
我正在编写一个小的bash脚本,并希望通过ssh执行以下命令sudo -i mysql -uroot -pPASSWORD --execute "select user, host, password_last_changed from mysql.user where password_last_changed <= '2016-9-00 11:00:00' order by password_last_changed ASC;"不幸的是,这个命令包含简单和双引号,所以我做不到ssh user@host "command";什么是解决此问题的推荐方法?解决方法:使用heredoc
你可以在shell的stdin上传递确切的代码:ssh...
参见英文答案 > When to wrap quotes around a shell variable? 5个我理解使用单引号和双引号.
但我不知道情况需要在脚本中加双引号.
这些陈述没有差异$echo hello world! $1
$echo "hello world! $1"请告诉我正常和双引号之间的差异.解决方法:让我们考虑一下这些文件的目录:$ls foo*
foo111.txt foo11.txt foo1.txt让我们考虑一下脚本的一个小变化:$cat script
#!/bin/sh
echo No quotes ...
用一个小程序(argv.py)来演示下:#!/usr/local/bin/python3
import sysprint(sys.argv has these, len(sys.argv), elements:, sys.argv) 运行与结果:# 首先是赋予执行权限
chmod 755 argv.py#1 一个空格一个命令行参数
./argv.py I love Shell scripting.
sys.argv has these 5 elements: [./argv.py, I, love, Shell, scripting.] #2 命令行所有参数被或者""引起来变成一个字符串
./ar...
双引号(和单引号)是否抑制了通配符扩展?如果是这样,那么为什么以下呢
find -name“d *”
没有suppess通配符*?也就是说,上述命令的输出都是以字母d开头的文件和目录的所有路径,就好像正在进行一些扩展一样.我期望通配符被抑制,因此它只会输出到名为d *的文件的路径,但事实并非如此.
这是否意味着双引号在某些情况下会有例外情况?
谢谢!解决方法:引号抑制shell的通配符扩展,这意味着在这种情况下,查找-name的参数将是文字d *.
如...
我使用ls来获取具有空白区域的文件名,因此它看起来像:
我的文件有whitespace.tar.bz2
我想把它管道到tar类似于:ls | grep mysearchstring | tar xvjf如何在将它用于tar之前插入双引号?解决方法:一个很好的工具是find和xargs.例如,您可以使用:find . -name '*.tar.bz2' -print0 | xargs -0 -n1 tar xjf正如pixelbeat建议您也可以像这样使用shell:for archive in *.tar.bz2; do tar xvjf "$archive"; done
1. 单引号 ( )
# grep Susan phonebook
Susan Goldberg 403-212-4921
Susan Topple 212-234-2343
如果我们想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldberg和phonebook当作需要搜索的文件
# grep Susan Gold phonebook
Susan Goldberg 403-212-4921
当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符2. 双引号 ( " " )
双引号作用与单引号类似,区别在于它没有那么严...
1.单引号 ( ) 单引号,不具有变量置换的功能,即单引号会告诉shell忽略所有的特殊字符2.双引号(" ") 双引号,具有变量置换的功能,即双引号之要求忽略大多数特殊字符,除了$(使用变量前导符), (转义符), `(反向引号)。
3.反向引号( ): 命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。(相当于$(...))
$( )与``的区别在操作上,这两者都是达到相应的效果...