簡體   English   中英

.sh腳本未正確返回變量

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM