下面進入命令行值是提取命令行輸入bash腳本代碼:如何使用循環
input=(*);
for i in {1..5..1}
do
input[i]=$($i);
done;
我的問題是:如何獲得$ 1,$ 2,$ 3,$ 4個值從輸入命令行,其中的命令行輸入代碼是:
bash script.sh "abc.txt" "|" "20" "yyyy-MM-dd"
注:在 「$ {@}」
0123不使用對於i下面進入命令行值是提取命令行輸入bash腳本代碼:如何使用循環
input=(*);
for i in {1..5..1}
do
input[i]=$($i);
done;
我的問題是:如何獲得$ 1,$ 2,$ 3,$ 4個值從輸入命令行,其中的命令行輸入代碼是:
bash script.sh "abc.txt" "|" "20" "yyyy-MM-dd"
注:在 「$ {@}」
0123不使用對於i#!/bin/bash
for ((i=$#-1;i>=0;i--)); do
echo "${BASH_ARGV[$i]}"
done
例子:./script.sh a "foo bar" c
輸出:
a foo bar c
在bash腳本中,我們可以使用'$ 1','$ 2'等提取輸入值...所以我們如何使用for循環提取這些值,其中1,2值是實用的。 – RaiBnod
如果我正確理解你想要做什麼,你可以寫:
input=("[email protected]")
複製位置參數放入名爲input
的數組中。
如果你特別想只有前五個位置參數,你可以寫:
input=("${@:1:5}")
編輯補充:或者,你問,因爲是整數2
變量i
,你怎麼能得到$2
?如果這是您的問題,那麼您可以使用間接擴展,其中Bash檢索變量的值,然後使用該值作爲要替換的變量的名稱。間接擴大使用!
字符:
i=2
input[i]="${!i}" # same as input[2]="$2"
這幾乎總是一個壞主意,但。你應該重新思考你在做什麼。
我不知道你有什麼反對for i in "[email protected]"; do...
,但你肯定能做到這一點與shift
,例如:
while [ -n "$1" ]; do
printf " '%s'\n" "$1"
shift
done
輸出
$ bash script.sh "abc.txt" "|" "20" "yyyy-MM-dd"
'abc.txt'
'|'
'20'
'yyyy-MM-dd'
就個人而言,我不看看爲什麼你排除for i in "[email protected]"; do ...
這是一個有效的方式來迭代通過保留引用空格的參數。您也可以使用數組和C樣式循環,如其他答案中所示。
note:如果您打算使用您的input
陣列,則應該使用input=("[email protected]")
而不是input=($*)
。使用後者將不會保留位置參數中的引號空格。例如
input=("[email protected]")
for ((i = 0; i < ${#input[@]}; i++)); do
printf " '%s'\n" "${input[i]}"
done
工作正常,但如果你使用input=($*)
帶參數線"a b"
,它將把這些作爲兩個單獨的參數。
「我在」$ @「中出現了什麼問題;做...'?你不喜歡它嗎? –
你可以簡單地寫'for i;做...',不需要添加'in「$ @」'。我認爲這是遍歷輸入參數的最自然的方式。 – user1934428