日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell 编程中空格的使用,双引号,单引号,反引号

發布時間:2024/9/30 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell 编程中空格的使用,双引号,单引号,反引号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/panda19881/article/details/6626727

1.定義變量時, =號的兩邊不可以留空格.
eg:
gender=femal————right
gender =femal———–wrong
gender= femal———–wrong
2.條件測試語句 [ 符號的兩邊都要留空格.
eg:
if [ $gender = femal ]; then——-right.
echo “you are femal”;
fi

if[ $gender...-----------------------wrong
if [$gender...----------------------wrong.

3.條件測試的內容,如果是字符串比較的話, 比較符號兩邊要留空格!
eg:
if [ $gender = femal ]; then——-right.
if [ $gender= femal ]; then——–wrong.
if [ $gender=femal ]; then———wrong.

4.如果if 和 then寫在同一行, 那么,注意, then的前面要跟上 ; 號.如果 then 換行寫, 那么也沒問題.
eg:
if [ $gender = femal ]; then——-right.
if [ $gender = femal ]
then——————————-right.
if [ $gender = femal ] then——-wrong. then前面少了 ; 號.
提示出錯信息:
syntax error near unexpected token then
同理,還有很多出錯信息 比如
syntax error near unexpected token fi 等都是這樣引起的.

5.if 后面一定要跟上 then. 同理
elif 后面一定要跟上 then.
不然提示出錯信息:
syntax error near unexpected token else

1)if 語句后面需要跟著then,同時前面要有分號;
2) 空格非常重要,shell 會認為空格前的為一個命令,如果a=3 認為是賦值操作,如果寫成a = 3,那么就會認為a為一個命令 this=`ls -l |grep ‘^-’ | wc -l `
3) 操作符之間要用空格分開 ,如 test ! -d $1,其中的!和-d就要用空格分開
空格是命令解析中的重要分隔符

6. 命令和其后的參數或對象之間一定要有空格

if [ -x"~/Workspace/shell/a.sh" ];then

只有 -x 后有空格才表示緊跟其后的字符串是否指向一個可執行的文件名,否則就成了測試 -x"~/Workspace/shell/a.sh" 這個字符串是不是空。

7.取變量值的符號'$'和后邊的變量或括號不能有空格


http://blog.sina.com.cn/s/blog_5f5716580100l9k1.html

hard quote:單引號,關閉所有的meta(什么是meta,自己查吧)
soft quote:雙引號,關閉大部分的meta,但是某些保留,例如$
這里也提一下escape:反斜杠,它只會關閉緊跟escape之后的字符。

參考cu上經典的十三問,hard quote關閉shell的meta,而soft quote關閉大部分的shell meta,但是$例外,對于bash的來說,命令的解釋是從左到右的,首先遇到hard quote和soft quote,所作的解釋是不一樣,看這個例子:
$ a=1
$ echo "$a"
1???????????????#$被bash解釋到
$ echo "'$a'"
'1'????????????????#hard quote被關閉
$ echo '$a'
$a????????????????#$被hard quote關閉
$ echo '"$a"'
"$a"????????????#所有都被關閉了

如果能夠理解上面的了,那基本知道怎么用單引號和雙引號了。

而對于awk、ed等等命令,需要區分shell meta和command meta
對于awk來說,它的{ }:是將其內的命令置于non-named function 中執行,awk用{ }來區分命令段,例如BEGIN,END等等。舉個例子:
$ awk {print $1} b.txt
awk: line 2: missing } near end of file

看看報錯,如果直接使用{ },那么我們知道{ }沒有被shell關閉,也就是說它看成shell的meta了,當然報錯了,所以要關閉,同時shell中的$也關閉,也就是$需要成為awk的meta了,很好理解吧?如下輸出了內容。
awk '{print $1}' b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao
./0/115/qq/.ywt

既然要要關閉{ },那么也可以用soft quote,
awk "{print $0}" b.txt
0
0
0
可以看到,soft quote預期的關閉了{ },但是$還是被shell解釋了,這次我們可以用escape,將$關閉了。
$ awk "{print \$0}" b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao
./0/115/qq/.ywt

說到這里,可以大家都一點明白了,并不是awk '{ }' urfile是awk的固定語法,而是為了讓awk能夠跳脫shell的偷取其命令和參數,看看這個例子就明白了。
$ awk \{print\ \$0\} b.txt
./0/137/qq/.zhangqx
./0/10/qq/.zyyao

所作的一切是為了讓awk或者自己的meta,請切記注意print后的空格,也要關閉,要不又被shell解釋了。

2. 雙引號 ( " " )
雙引號作用與單引號類似,區別在于它沒有那么嚴格。單引號告訴shell忽略所有特殊字符,而雙引號只要求忽略大多數,具體說,括在雙引號中的三種特殊字符不被忽略:$,\,` ,即雙引號會解釋字符串的特別意思,而單引號直接使用字符串.

3、. 反斜杠 backslash-escaped( \ )
反斜杠一般用作轉義字符,或稱逃脫字符,linux如果echo要讓轉義字符發生作用,就要使用-e選項,且轉義字符要使用雙引號
echo -e "\n"
反斜杠的另一種作用,就是當反斜杠用于一行的最后一個字符時,shell把行尾的反斜杠作為續行,這種結構在分幾行輸入長命令時經常使用。

BTW

4、$()和``的區別
反引號和$()的功能是命令替換,將反引號或$()中的字符串做為命令來執行,我們在用shell編程時經常用的到 將系統命令的執行結果賦給一個變量
但反引號內不能再引用反引號,而$()中可以引用反引號


1. 除了賦值操作=左右兩邊不能有空格,其他都要有空格

2. 如果在一行寫多句,每一句就要用;分隔

3. 字符串變量也可以自動變成整數?a='123'; echo `expr $a + 1`


總結

以上是生活随笔為你收集整理的shell 编程中空格的使用,双引号,单引号,反引号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。