[英].sh script doesn't return variable correctly
我創建了一個名為alias.sh的文件,在其中放置了以下代碼:
#!/bin/bash
OUTPUT="$(alias | awk -F'[ =]' '{print $2}')"
echo "${OUTPUT}"
每當我運行命令alias | awk -F'[ =]' '{print $2}'
alias | awk -F'[ =]' '{print $2}'
在終端中,它以我的首選格式正確返回了一組別名列表。
但是,當我執行$ ./alias.sh
類的腳本時,它只是返回一個空行。
如果替換alias | awk -F'[ =]' '{print $2}'
,腳本可以工作 使用ls
命令執行alias | awk -F'[ =]' '{print $2}'
命令。 它甚至保留換行符。
有人可以幫助我理解為什么腳本未返回預期結果嗎?
您在AWK腳本中使用$2
。 但是,將其替換為Shell作為Shell腳本的第二個參數,沒什么。 您需要轉義美元符號,如\\$2
。 還是不要在子外殼周圍使用雙引號"
。
發生此錯誤的實際原因是,當Shell非交互式時, 別名沒有擴展,
在man bash
頁面上,
[..]當外殼不是交互式時,別名不會擴展,除非使用shopt [..]設置expand_aliases shell選項。
將以下行添加到腳本頂部,以手動強制展開。
shopt -s expand_aliases
然后執行此腳本,而不是執行它,
#!/bin/bash
shopt -s expand_aliases
output=$(alias | awk -F'[ =]' '{print $2}')
echo "$output"
現在將腳本來源為
. ./myScript.sh
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.