在一個bash腳本中,我進行了這個測試。哪個工作完美。在IF語句中對可選參數進行測試
function copy_to_server {
if [ $1 -nt limit ]; then
現在我希望允許第三個參數力。但無論價值,測試通過:
function copy_to_server {
if [ $1 -nt limit ] || [ "$3"="-f" ] || [ "$3"="--force" ]; then
如何正確測試我的參數?
在一個bash腳本中,我進行了這個測試。哪個工作完美。在IF語句中對可選參數進行測試
function copy_to_server {
if [ $1 -nt limit ]; then
現在我希望允許第三個參數力。但無論價值,測試通過:
function copy_to_server {
if [ $1 -nt limit ] || [ "$3"="-f" ] || [ "$3"="--force" ]; then
如何正確測試我的參數?
您需要包括空格:
if [ "$1" -nt limit ] || [ "$3" = "-f" ] || [ "$3" = "--force" ]; then
未能做到這一點,外殼認爲像一個參數測試的內部,並通過規範,用一個參數,一個測試返回「真」 (0)如果參數不爲空。
此外,請注意我在第一個測試中引用了$1
:如果傳遞包含空白的參數,而不引用單詞分割,並且shell將看到多於三個參數並且語法錯誤失敗(或至少不會做你想做的事)。
如果您不介意特定於Bash的語法,則可以使用[[ ]]
類型的測試,該測試不執行分詞。
if [[ $1 -nt limit ]] || [[ $3 = -f ]] || [[ $3 = --force ]]; then
不過,到那個時候,你都可以把它們放在一起在一個單一的測試,因爲這種風格的測試還支持邏輯運算符:
if [[ $1 -nt limit || $3 = -f || $3 = --force ]; then
請注意=
和!=
運營商在[[ ]]
測試做globbing,所以如果被測試的字符串包含可能觸發glob的東西(如*),則需要引用右側。
空格。你忘記'='周圍的空格。 – muru
另外,'[「$ 3」=「-f」] || [「$ 3」=「--force」]'可以簡化爲'[[$ 3 =〜^( - f | --force)$]]',因爲缺少@muru空格,所以使用正則表達式運算符 – Inian
。 – mickro