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

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

蒂爾德報價

蒂爾德報價

我編寫了一個腳本,該腳本必須在用戶定義的目錄中找到一些可能包含波浪號的文件(因此可能有user_defined_directory='~/foo')。構造看起來像found_files=$(find "$user_defined_directory" -type f … )我使用引號來覆蓋該路徑中的可能空格,但是根據手冊頁,代字號擴展無法在引號中起作用。我知道:運算符可能可以進行這種擴展,但是我不知道在這里如何使用它。從用戶$ HOME目錄中的另一個配置文件獲取“用戶定義目錄”。它沒有作為參數傳遞給我的腳本,而是從我編寫的腳本中的另一個配置進行解析的。
查看完整描述

3 回答

?
臨摹微笑

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

您可以使用"${user_defined_directory/#~/$HOME}"當前用戶的主目錄替換字符串開頭的“?”。請注意,這不會處理~username/subdir格式,只能處理純格式~。如果需要處理更復雜的版本,則需要編寫一個更復雜的轉換器。


查看完整回答
反對 回復 2019-10-22
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

在給出一些相當合理的假設的情況下,此方法有效,但它遠非顯而易見的代碼(而且也不是單行代碼):


# Working function - painful, but can you simplify any of it?

# NB: Assumes that ~user does not expand to a name with double spaces or

#     tabs or newlines, etc.


expand_tilde()

{

    case "$1" in

    (\~)        echo "$HOME";;

    (\~/*)      echo "$HOME/${1#\~/}";;

    (\~[^/]*/*) local user=$(eval echo ${1%%/*})

                echo "$user/${1#*/}";;

    (\~[^/]*)   eval echo ${1};;

    (*)         echo "$1";;

    esac

}


# Test cases


name1="~/Documents/over  enthusiastic"

name2="~crl/Documents/double  spaced"

name3="/work/whiffle/two  spaces  are  better  than one"


expand_tilde "$name1"

expand_tilde "$name2"

expand_tilde "$name3"

expand_tilde "~"

expand_tilde "~/"

expand_tilde "~crl"

expand_tilde "~crl/"


# This is illustrative of the 'normal use' of expand_tilde function

x=$(expand_tilde "$name1")

echo "x=[$x]"

在我的機器(有一個用戶crl)上運行時,輸出為:


/Users/jleffler/Documents/over  enthusiastic

/Users/crl/Documents/double  spaced

/work/whiffle/two  spaces  are  better  than one

/Users/jleffler

/Users/jleffler/

/Users/crl

/Users/crl/

x=[/Users/jleffler/Documents/over  enthusiastic]

該功能分別tilde_expansion處理不同情況。第一個子句處理一個值~并簡單地替換$HOME。第二種情況是偏執狂:~/映射到$HOME/。第三個處理~/anything(包括一個空的“任何東西”)。下一種情況處理~user。包羅萬象*處理其他所有問題。


請注意,該代碼做出了(合理的)假設,即~user不會擴展為包含任何雙精度空格,任何制表符或換行符(以及可能還有其他類似空格的字符)的值。如果您必須解決這個問題,生活將是地獄。


請注意chdir()主目錄的答案,該答案說明POSIX需要~擴展為當前值$HOME,但~user必須從密碼數據庫擴展為主目錄的值。


查看完整回答
反對 回復 2019-10-22
?
慕的地6264312

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

提爾德(Tilde)絕對不會在報價內擴展??赡苓€有其他bash技巧,但是在這種情況下,我要做的是:


find ~/"$user_defined_directory" -type f

即,將~/引號外的引號移開,并將其余路徑保留在引號中。


查看完整回答
反對 回復 2019-10-22
  • 3 回答
  • 0 關注
  • 576 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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