比如寫一個 Bash 函數, 創建并進入一個目錄 newdir first-demo/, 用 alias 無法完成的,可如果我用的是 $1 進行傳參 mkdir $1 && cd $1, 像 newdir second\ demo/ 就會出錯,結果是創建兩個目錄, 進入到空格前的名字對應的目錄.
2 回答

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
對bash編程不熟,說個無關的,我認為更廣泛的原則是,對于shell有特殊含義的字符,在使用的時候還是應該用引號,這應該是shell通用的原則。
mkdir 'lol omg'

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
shell有特殊含義的字符,在使用的時候還是應該用引號,這應該是shell通用的原則
不過要補充幾點:
對于你上面的創建并進入一個目錄的腳本來說,mkdir $1并不能創建目錄second demo/,因為Shell傳遞給腳本的$1是second demo,于是mkdir $1相當于mkdir second demo,會創建兩個目錄。所以需要使用雙引號,即:mkdir "$1".
用./newdir執行腳本時,Shell會fork一個子進程并調用exec執行這個腳本,因此cd ..命令改變的是子Shell的PWD,而不會影響到交互式Shell的pwd。
如果想在當前shell進程執行腳本,可以使用.或者source命令。
腳本如下:
mkdir "$1" && cd "$1"
用source或者. 執行結果:
$ pwd
/home/user/etc
$ source ./a.sh 'new dir'
$ pwd
/home/user/etc/new dir
- 2 回答
- 0 關注
- 186 瀏覽
添加回答
舉報
0/150
提交
取消