如果你的shell是足夠新的版本bash
,即parameter expansion符號應該工作。
在其他許多炮彈,它不會工作,並且bad substitution
錯誤是shell說的方式「你問了參數替代,但它並沒有道理給我。」
另外,給出的腳本:
#! /bin/sh
length=echo `expr index "$1" .zip`
a=$1
echo $(a:0:length}
第二行出口變量length
與值echo
用於通過運行expr index "$1" .zip
產生的命令。它不分配給length
。這應該只是:
length=$(expr index "${1:?}" .zip)
其中,如果$1
沒有設置(如果腳本不帶任何參數調用的)的${1:?}
符號生成一個錯誤。
最後一行應該是:
echo ${a:0:$length}
注意,如果$1
持有filename.zip
的expr index $1 .zip
輸出爲2,因爲字母i
在指數2 filename.zip
出現。如果目的是獲取文件的基本名稱,而不.zip
擴展,那麼經典的方式來做到這一點是:
base=$(basename $1 .zip)
和更現代的方式是:
base=${1%.zip}
有一個區別;如果名稱爲/path/to/filename.zip
,則經典輸出爲filename
,而現代輸出爲/path/to/filename
。你可以用經典的輸出:
base=${1%.zip}
base=${base##*/}
或者,在經典的版本,你可以得到的路徑:
base=$(dirname $1)/$(basename $1 .zip)`.)
如果文件名稱可以包含空格,則需要考慮使用雙引號,特別是在basename
和dirname
的調用中。
你想做什麼? –
您對劇本的理由是什麼,即$ 1的價值?請將上述信息編輯成上述信息,而不是回覆我的評論。嘗試在dbl引號中包含所有對$ 1的引用,即'echo「$ 1」'等等,祝你好運! – shellter
你用'$ {a:0}'發現了什麼? –