2015-02-11 207 views
0

這裏使用1#作爲目錄的用途是什麼?UNIX腳本中的shell腳本錯誤

cpfile = $ {1#/ usr/newconfig} ls -l $ cpfile |閱讀var1 echo var1

我試着去理解腳本,但我找不到任何資源可以幫助我確定此命令的含義。

+0

也許你的意思是$ {!#/ usr/newconfig} – deathangel908 2015-02-11 12:05:09

+3

閱讀[bash'手冊頁](http://man7.org/linux/man- pages/man1/bash.1.html)並搜索「參數擴展」和「刪除匹配的前綴模式」。在這種情況下,'1'是腳本的第一個參數(即'$ 1')。 – 2015-02-11 12:07:15

回答

0

一般來說,可以使用#來修改變量,這會刪除前導字符串。如果a是內容爲foobar的變量,則${a#foo}foo去掉並評估爲bar。在你的情況下,$ 1是一個位置參數,並且${1#/usr/newconfig}是從一開始就刪除了「/ usr/newconfig」的那個字符串的值。如果不匹配,表達式的計算結果與$ 1相同。

但是,該腳本存在一個相當重要的問題,即它在運行的ls環境中分配cpfile,但ls未收到它作爲參數。因此,ls將在當前工作目錄上運行,而不是作爲腳本參數傳遞的目錄。 (除非cpfile先前已在腳本中指定)

+0

謝謝Pursell先生 – 2015-02-12 06:05:57