亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問怎樣能解決這個問題?Bash 腳本 `function` 怎樣捕獲帶空格的參數?

請問怎樣能解決這個問題?Bash 腳本 `function` 怎樣捕獲帶空格的參數?

PHP
海綿寶寶撒 2023-05-01 14:10:56
比如寫一個 Bash 函數, 創建并進入一個目錄 newdir first-demo/, 用 alias 無法完成的,可如果我用的是 $1 進行傳參 mkdir $1 && cd $1, 像 newdir second\ demo/ 就會出錯,結果是創建兩個目錄, 進入到空格前的名字對應的目錄.
查看完整描述

2 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

對bash編程不熟,說個無關的,我認為更廣泛的原則是,對于shell有特殊含義的字符,在使用的時候還是應該用引號,這應該是shell通用的原則。

mkdir 'lol omg'


查看完整回答
反對 回復 2023-05-03
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

shell有特殊含義的字符,在使用的時候還是應該用引號,這應該是shell通用的原則

不過要補充幾點:

  1. 對于你上面的創建并進入一個目錄的腳本來說,mkdir $1并不能創建目錄second demo/,因為Shell傳遞給腳本的$1是second demo,于是mkdir $1相當于mkdir second demo,會創建兩個目錄。所以需要使用雙引號,即:mkdir "$1".

  2. 用./newdir執行腳本時,Shell會fork一個子進程并調用exec執行這個腳本,因此cd ..命令改變的是子Shell的PWD,而不會影響到交互式Shell的pwd。

  3. 如果想在當前shell進程執行腳本,可以使用.或者source命令。

腳本如下:

mkdir "$1" && cd "$1"

用source或者. 執行結果:

$ pwd
/home/user/etc
$ source ./a.sh 'new dir'
$ pwd
/home/user/etc/new dir


查看完整回答
反對 回復 2023-05-03
  • 2 回答
  • 0 關注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號