Excel2016打印預(yù)覽表格的教程是什么(excel2016怎么看打印預(yù)覽)">Excel2016打印預(yù)覽表格的教程是什么(excel2016怎么看打印預(yù)覽)
1365
2022-05-29
目錄
轉(zhuǎn)義
單引號(hào)
雙引號(hào)
Here 文檔
Here 字符串
轉(zhuǎn)義
某些字符在 Bash 里面有特殊含義(比如$、&、*)。
$ echo $date
$
上面例子中,輸出$date不會(huì)有任何結(jié)果,因?yàn)?是一個(gè)特殊字符。
如果想要原樣輸出這些特殊字符,就必須在它們前面加上反斜杠,使其變成普通字符。這就叫做“轉(zhuǎn)義”(escape)。
$ echo $date
$date
上面命令中,只有在特殊字符$前面加反斜杠,才能原樣輸出。
反斜杠本身也是特殊字符,如果想要原樣輸出反斜杠,就需要對(duì)它自身轉(zhuǎn)義,連續(xù)使用兩個(gè)反斜線(\)。
$ echo \
\
上面例子輸出了反斜杠本身。
反斜杠除了用于轉(zhuǎn)義,還可以表示一些不可打印的字符。
\a:響鈴
\b:退格
\n:換行
\r:回車(chē)
\t:制表符
如果想要在命令行使用這些不可打印的字符,可以把它們放在引號(hào)里面,然后使用echo命令的-e參數(shù)。
$ echo a\tb
atb
$ echo -e "a\tb"
a b
上面例子中,命令行直接輸出不可打印字符\t,Bash 不能正確解釋。必須把它們放在引號(hào)之中,然后使用echo命令的-e參數(shù)。
換行符是一個(gè)特殊字符,表示命令的結(jié)束,Bash 收到這個(gè)字符以后,就會(huì)對(duì)輸入的命令進(jìn)行解釋執(zhí)行。換行符前面加上反斜杠轉(zhuǎn)義,就使得換行符變成一個(gè)普通字符,Bash 會(huì)將其當(dāng)作空格處理,從而可以將一行命令寫(xiě)成多行。
$ mv \
/path/to/foo \
/path/to/bar
# 等同于
$ mv /path/to/foo /path/to/bar
上面例子中,如果一條命令過(guò)長(zhǎng),就可以在行尾使用反斜杠,將其改寫(xiě)成多行。這是常見(jiàn)的多行命令的寫(xiě)法。
單引號(hào)
Bash 允許字符串放在單引號(hào)或雙引號(hào)之中,加以引用。
單引號(hào)用于保留字符的字面含義,各種特殊字符在單引號(hào)里面,都會(huì)變?yōu)槠胀ㄗ址热缧翘?hào)(*)、美元符號(hào)($)、反斜杠(\)等。
$ echo '*'
*
$ echo '$USER'
$USER
$ echo '$((2+2))'
$((2+2))
$ echo '$(echo foo)'
$(echo foo)
上面命令中,單引號(hào)使得 Bash 擴(kuò)展、變量引用、算術(shù)運(yùn)算和子命令,都失效了。如果不使用單引號(hào),它們都會(huì)被 Bash 自動(dòng)擴(kuò)展。
由于反斜杠在單引號(hào)里面變成了普通字符,所以如果單引號(hào)之中,還要使用單引號(hào),不能使用轉(zhuǎn)義,需要在外層的單引號(hào)前面加上一個(gè)美元符號(hào)($),然后再對(duì)里層的單引號(hào)轉(zhuǎn)義。
# 不正確
$ echo it's
# 不正確
$ echo 'it\'s'
# 正確
$ echo $'it\'s'
不過(guò),更合理的方法是改在雙引號(hào)之中使用單引號(hào)。
$ echo "it's"
it's
雙引號(hào)
雙引號(hào)比單引號(hào)寬松,大部分特殊字符在雙引號(hào)里面,都會(huì)失去特殊含義,變成普通字符。
$ echo "*"
*
上面例子中,通配符*是一個(gè)特殊字符,放在雙引號(hào)之中,就變成了普通字符,會(huì)原樣輸出。這一點(diǎn)需要特別留意,這意味著,雙引號(hào)里面不會(huì)進(jìn)行文件名擴(kuò)展。
但是,三個(gè)特殊字符除外:美元符號(hào)($)、反引號(hào)(`)和反斜杠(\)。這三個(gè)字符在雙引號(hào)之中,依然有特殊含義,會(huì)被 Bash 自動(dòng)擴(kuò)展。
$ echo "$SHELL"
/bin/bash
$ echo "`date`"
Mon Jan 27 13:33:18 CST 2020
上面例子中,美元符號(hào)($)和反引號(hào)(`)在雙引號(hào)中,都保持特殊含義。美元符號(hào)用來(lái)引用變量,反引號(hào)則是執(zhí)行子命令。
$ echo "I'd say: \"hello!\""
I'd say: "hello!"
$ echo "\"
\
上面例子中,反斜杠在雙引號(hào)之中保持特殊含義,用來(lái)轉(zhuǎn)義。所以,可以使用反斜杠,在雙引號(hào)之中插入雙引號(hào),或者插入反斜杠本身。
換行符在雙引號(hào)之中,會(huì)失去特殊含義,Bash 不再將其解釋為命令的結(jié)束,只是作為普通的換行符。所以可以利用雙引號(hào),在命令行輸入多行文本。
$ echo "hello
world"
hello
world
上面命令中,Bash 正常情況下會(huì)將換行符解釋為命令結(jié)束,但是換行符在雙引號(hào)之中就失去了這種特殊作用,只用來(lái)?yè)Q行,所以可以輸入多行。echo命令會(huì)將換行符原樣輸出,顯示的時(shí)候正常解釋為換行。
雙引號(hào)的另一個(gè)常見(jiàn)的使用場(chǎng)合是,文件名包含空格。這時(shí)就必須使用雙引號(hào),將文件名放在里面。
$ ls "two words.txt"
上面命令中,two words.txt是一個(gè)包含空格的文件名,否則就會(huì)被 Bash 當(dāng)作兩個(gè)文件。
雙引號(hào)會(huì)原樣保存多余的空格。
$ echo "this is a test"
this is a test
雙引號(hào)還有一個(gè)作用,就是保存原始命令的輸出格式。
# 單行輸出
$ echo $(cal)
一月 2020 日 一 二 三 四 五 六 1 2 3 ... 31
# 原始格式輸出
$ echo "$(cal)"
一月 2020
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
上面例子中,如果$(cal)不放在雙引號(hào)之中,echo就會(huì)將所有結(jié)果以單行輸出,丟棄了所有原始的格式。
Here 文檔
Here 文檔(here document)是一種輸入多行字符串的方法,格式如下。
<< token
text
token
它的格式分成開(kāi)始標(biāo)記(<< token)和結(jié)束標(biāo)記(token)。開(kāi)始標(biāo)記是兩個(gè)小于號(hào) + Here 文檔的名稱(chēng),名稱(chēng)可以隨意取,后面必須是一個(gè)換行符;結(jié)束標(biāo)記是單獨(dú)一行頂格寫(xiě)的 Here 文檔名稱(chēng),如果不是頂格,結(jié)束標(biāo)記不起作用。兩者之間就是多行字符串的內(nèi)容。
下面是一個(gè)通過(guò) Here 文檔輸出 HTML 代碼的例子。
$ cat << _EOF_
The title of your page
Your page content goes here.
_EOF_
Here 文檔內(nèi)部會(huì)發(fā)生變量替換,同時(shí)支持反斜杠轉(zhuǎn)義,但是不支持通配符擴(kuò)展,雙引號(hào)和單引號(hào)也失去語(yǔ)法作用,變成了普通字符。
$ foo='hello world'
$ cat << _example_
$foo
"$foo"
'$foo'
_example_
hello world
"hello world"
'hello world'
上面例子中,變量$foo發(fā)生了替換,但是雙引號(hào)和單引號(hào)都原樣輸出了,表明它們已經(jīng)失去了引用的功能。
如果不希望發(fā)生變量替換,可以把 Here 文檔的開(kāi)始標(biāo)記放在單引號(hào)之中。
$ foo='hello world'
$ cat << '_example_'
$foo
"$foo"
'$foo'
_example_
$foo
"$foo"
'$foo'
上面例子中,Here 文檔的開(kāi)始標(biāo)記(_example_)放在單引號(hào)之中,導(dǎo)致變量替換失效了。
Here 文檔的本質(zhì)是重定向,它將字符串重定向輸出給某個(gè)命令,相當(dāng)于包含了echo命令。
$ command << token
string
token
# 等同于
$ echo string | command
上面代碼中,Here 文檔相當(dāng)于echo命令的重定向。
所以,Here 字符串只適合那些可以接受標(biāo)準(zhǔn)輸入作為參數(shù)的命令,對(duì)于其他命令無(wú)效,比如echo命令就不能用 Here 文檔作為參數(shù)。
$ echo << _example_
hello
_example_
上面例子不會(huì)有任何輸出,因?yàn)?Here 文檔對(duì)于echo命令無(wú)效。
此外,Here 文檔也不能作為變量的值,只能用于命令的參數(shù)。
Here 字符串
Here 文檔還有一個(gè)變體,叫做 Here 字符串(Here string),使用三個(gè)小于號(hào)(<<<)表示。
<<< string
它的作用是將字符串通過(guò)標(biāo)準(zhǔn)輸入,傳遞給命令。
有些命令直接接受給定的參數(shù),與通過(guò)標(biāo)準(zhǔn)輸入接受參數(shù),結(jié)果是不一樣的。所以才有了這個(gè)語(yǔ)法,使得將字符串通過(guò)標(biāo)準(zhǔn)輸入傳遞給命令更方便,比如cat命令只接受標(biāo)準(zhǔn)輸入傳入的字符串。
$ cat <<< 'hi there'
# 等同于
$ echo 'hi there' | cat
上面的第一種語(yǔ)法使用了 Here 字符串,要比第二種語(yǔ)法看上去語(yǔ)義更好,也更簡(jiǎn)潔。
$ md5sum <<< 'ddd'
# 等同于
$ echo 'ddd' | md5sum
上面例子中,md5sum命令只能接受標(biāo)準(zhǔn)輸入作為參數(shù),不能直接將字符串放在命令后面,會(huì)被當(dāng)作文件名,即md5sum ddd里面的ddd會(huì)被解釋成文件名。這時(shí)就可以用 Here 字符串,將字符串傳給md5sum命令。
下一節(jié)Bash腳本教程之變量
Bash
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。