[英]Checking if the first argument passed to a bash script is set?
我正在嘗試查看傳遞給我腳本的第一個參數是否已設置。 我使用此處的說明創建測試: 如何檢查變量是否在Bash中設置?
這是我的腳本:
var=$1
if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi
假設我沒有任何參數運行它:
ole@MKI:./test.sh
var is set to ''
假設我用一個參數運行它:
ole@MKI:./test.sh foo
var is set to 'foo'
在這兩種情況下都沒有報告var未設置。
思考?
TIA,Ole
問題出在這一行:
var=$1
這設置了var
,無論是否設置了$1
,它都會這樣做。 解決方案是測試$1
:
if [ -z ${1+x} ]; then echo "var is unset"; else echo "var is set to '$1'"; fi
這種方法有效:
$ test.sh
var is unset
$ test.sh a
var is set to 'a'
即使運行腳本時未提供參數,也會設置var
變量。 它被賦予空字符串。
shell還將$#
special參數設置為參數個數。
嘗試一下:
if [[ $# = 0 ]] ; then printf "no parameter\n"; exit 1; else printf "At least one parameter\n"; var="${1}"; fi
如果您繼續使用其他附加參數(例如選項),那么您可以考慮使用來自The Open Group Base Specifications Issue 7的getopts - parse實用程序選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.