[英]how to specify an command line argument with a variable in bash
我希望我的bash腳本采用2或3個參數,而最后一個參數始終是要打開的輸入文件。 因此,參數索引應取決於提供的參數數量。 我知道這可以通過if語句來實現,例如:
if [ $# -eq 3 ]; then
INFILE=$3
elif [ $# -eq 2 ]; then
INFILE=$2
fi
..open文件讀取...
但是我希望通過一個看起來像這樣的襯里來完成:
INFILE=$($#)
它雖然不起作用。 與INFILE = $“ $#”相同。 是否可以直接用“ $#”指定參數索引
嘗試使用INFILE="${@: -1}"
來獲取最后一個參數。
您在shell中看到了一個眾所周知的限制。 :-)
您可以通過逐步瀏覽現有參數來獲取最后一個參數:
#!/bin/bash
while [ ! -z "$2" ]; do
shift
done
echo "Last argument: $1"
在Bourne(非Bash)shell中,您可以使用eval
做到這一點,這是邪惡的:
#!/bin/bash
eval "echo \"Last argument: \$$#\""
如果您不需要bash之外的可移植性,也可以使用@
數組:
#!/bin/bash
echo "Last argument: ${@: -1}"
您正在嘗試對數組進行間接引用,因此${!#}
也可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.