2012-04-15 3 views
1

これは愚かな疑問のように思えるかもしれませんが、私は解決策のために高く評価されています。私はいくつかの議論を受け入れるスクリプトを持っており、1つの議論をどのようにして次の即時議論にアクセスするかを知りたいだけです。私は役に立たないと$i+1のようなものを試してみました。この次の引数は最終的に宛先ディレクトリを保持するので、その内容にアクセスできる必要があります。また、私はループ内で反復されるカウンタ変数を介して引数の位置を取得していることに注意してください。そのため、単に$2などとは言えません。私はそんな普通の質問をお詫び申し上げます。BASHループなしのコマンドラインで次の 'フィールド'にアクセスする

答えて

4
$ bash -c 'foo=1 ; echo ${@:$((foo+2)):1}' a b c d e f g 
d 
+0

これはトリックでした!エコー後に何が起こっているのか説明していただけますか?なぜたくさんの '$'と '@'が必要なのですか?また、使用されているコロンは何ですか?そして孤独な1?どうもありがとうございます! – RedMageKnight

+0

[パラメータ拡張](http://wiki.bash-hackers.org/syntax/pe)、[算術拡張](http://wiki.bash-hackers.org/syntax/expansion/arith)。 –

2

iは整数を含む変数であり、あなたは、(i + 1)番目の引数が必要な場合は、あなたが行うことができます:

eval arg=\$$((i + 1)) 

を今argはあなたが

0

をしたいの引数が含まれていますあなたのケースでは当てはまらないかもしれませんが、引き続き引数にアクセスする場合は、組み込みのshiftコマンドを使用して引数をシフトすることができます。引数なしでshiftを行う

$1の古い値を破棄し、その上$3$2$1$2を設定します。 shiftに数値的な議論を与えることは、その多くのステップをシフトさせるでしょう。

関連する問題