2011-05-12 42 views
7

當我在我的殼進入echo ${!BASH*},我得到的所有的env瓦爾名稱以字符串「BASH」開始:BASH shell參數(間接)擴展

BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION 

bash手冊頁是相當謹慎有關此功能稱爲shell parameter (indirect) expansion。此信息(此特定匹配模式的語法)必須位於某處,但我無法找到它。

  1. 我可以在變量名的末尾匹配一個字符串嗎?

    但字符串中的任何位置變量名稱大多

  2. 我能匹配嗎?

    哦,這將是令人愉快的

  3. 我可以匹配任何(*)的變量名地方? (基本上列出任何變量在for循環,BTW這正是我試圖做)

回答

6

據我所知,做間接名擴展與名字的結束不匹配內建的方法。

這裏是你可以做你想做的命令:

$ compgen -v | grep -E "HOME$" 

這將每哪個名字在HOME變量結束匹配。

通過改變grep部分你可以匹配變量名的任何部分。

compgen是bash內部打算在完成腳本中使用。 compgen -v將列出所有變量名稱。 compgen -v BASH將列出與echo ${!BASH*}相同的變量,但每行一個。