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

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

如何在bash中手動展開特殊變量(ex:~tilde)

如何在bash中手動展開特殊變量(ex:~tilde)

慕的地6264312 2019-07-06 16:34:38
如何在bash中手動展開特殊變量(ex:~tilde)我的bash腳本中有一個變量,其值如下所示:~/a/b/c注意,它是未展開的傾斜體。當我對這個變量(稱為$VAR)做ls-lt時,我就沒有這樣的目錄。我想讓bash解釋/展開這個變量而不執行它。換句話說,我希望bash運行val,但不運行計算過的命令。這在巴什有可能嗎?我是如何在沒有擴展的情況下將它傳遞到我的腳本中的?我用雙引號圍繞它傳遞了論點。嘗試使用這個命令來理解我的意思:ls -lt "~"這正是我所處的情況。我要擴大傾斜度。換句話說,我應該用什么代替魔術使這兩個命令完全相同:ls -lt ~/abc/def/ghi和ls -lt $(magic "~/abc/def/ghi")請注意,~/abc/def/ghi可能存在也可能不存在。
查看完整描述

3 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

由于StackOverflow的本質,我不能僅僅讓這個答案不被接受,但是在我發布這篇文章之后的5年里,有比我公認的最基本和非常糟糕的答案好得多的答案(我當時還年輕,不要殺了我)。

這個線程中的其他解決方案是更安全和更好的解決方案。我最好選擇這兩種方法中的任何一種:


原來的答案是出于歷史目的(但請不要使用這個)

如果我沒弄錯"~"不會被bash腳本以這種方式展開,因為它被視為一個文字字符串。"~"..你可以通過eval像這樣。

#!/bin/bashhomedir=~eval homedir=$homedir
echo $homedir # prints home path

或者,只需使用${HOME}如果您想要用戶的主目錄。


查看完整回答
反對 回復 2019-07-06
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

如果變量var是用戶輸入的,eval用于擴展傾斜體

eval var=$var  # Do not use this!

原因是:例如,用戶可以偶然(或按目的)類型。var="$(rm -rf $HOME/)"可能帶來災難性的后果。

一種更好(更安全)的方法是使用Bash參數展開:

var="${var/#\~/$HOME}"


查看完整回答
反對 回復 2019-07-06
  • 3 回答
  • 0 關注
  • 678 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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