簡體   English   中英

如何在bash中使用變量指定命令行參數

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

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