有人可以解釋一下這段代碼的意思嗎?請解釋這段代碼
我相信,第二行是「如果退出狀態是零」,然後回聲「有效的命令」,但我不明白的第一行
[email protected] &>/dev/null
if [[ $? = 0 ]]
then
echo "Valid command"
fi
有人可以解釋一下這段代碼的意思嗎?請解釋這段代碼
我相信,第二行是「如果退出狀態是零」,然後回聲「有效的命令」,但我不明白的第一行
[email protected] &>/dev/null
if [[ $? = 0 ]]
then
echo "Valid command"
fi
我想補充一點,這是不必要的冗長,而且可以縮短爲
if "[email protected]" &>/dev/null
then
echo "Valid command"
fi
,甚至更短的
"[email protected]" &>/dev/null && echo "Valid command"
第一行運行簡單地使用形成的所有命令參數傳遞給腳本,並將輸出重定向到/ dev/null,這本質上拋棄了它。
內置變量[email protected]擴展爲所有位置參數,每個參數都是帶引號的字符串,即參數完整地傳遞,沒有解釋或擴展。爲了達到這個效果,我相信你需要引用這個變量的用法,例如"[email protected]"
。
運營商&>
重定向stdout和stderr。
根據manual,[email protected]
擴展到位置參數,從1開始。如果您將此腳本稱爲scripty.sh ls /
,則它將執行ls /
,同時將所有輸出重定向到位桶。這應該返回成功(我希望!),因此腳本將打印Valid command
。如果您將其稱爲scripty.sh ls /some/nonexistent/directory
,則ls
命令應該失敗,並且腳本將不輸出任何內容。
實際上,我認爲腳本可以改進爲在[email protected]
左右加上雙引號,以便在它們中包含空格的參數不會影響解釋器。
使用[email protected]
命令ls "/Library/Application Support"
擴展爲三個字。隨着"[email protected]"
它擴大到兩個,並且命令運行就像沒有腳本包裝它一樣。
只是爲了支持:解釋這裏找到:HTTP:// TLDP .org/LDP/abs/html/internalvariables.html#APPREF – Yuri
我認爲'$ *'和'$ @'只有用雙引號包圍時纔會有所不同。 – mkb
@mkb:你說得對。我擔心@unwind不是:沒有指定'「$ @」',這些參數會得到空格分割,即 'function TT(){$ @; }; TT ls 1 2'3 4'' – choroba