位置パラメータ値を反映する機能的で簡単なコードがあります。
for i
do
echo "Argument = $i "
done
これはスクリプトの実際の出力です。
Argument = --atleast-pkgconfig-version
Argument = 0.9.0
作業は行われましたが、エコー出力にインデックスを追加する方法を理解しようとしました。
これはうまくいきません
cnt=1
for i
do
echo "Argument $cnt = $i "
((cnt++))
done
現在のコードはアクションを実行し、インデックスは次のようにケーキの上の装飾に過ぎません。
Argument #1 = --atleast-pkgconfig-version
Argument #2 = 0.9.0
どんなアイデアがありますか?
アップデート#1
私はデフォルトで「5分で編集」のタイムアウトを避けるために、これをテキストエディタのコピーとして公開しました。
#!/bin/sh スクリプトで両方のコードを実行しました。 1つはメインスクリプトで直接実行され、2番目は表示されているようにメインスクリプトから呼び出されたスクリプトで実行されます。どちらのコードもプライマリスクリプトでは正しく実行されますが、最初のコード(元の問題のコードとして公開されたコード)はセカンダリスクリプトでは実行されません。
はい、「より移植性の高い」コードが問題を解決します。必要なスクリプトで正しく実行されます。それでも元の質問(「見つかりません」エラーが原因で失敗する理由)には答えません。
メインスクリプト--exists glib-2.0 0
--modversion glib-2.0 2.54.3
--exists --print-errors glib-2.0 >= 2.28 0
First code - OK
Argument #1 = dummy
Argument #2 = mt
Second code OK
Argument #1 = dummy
Argument #2 = mt
ヘルパースクリプト
最初のコード – 失敗
/usr/bin/arm-linux-gnueabihf-pkg-config: 19: /usr/bin/arm-linux-gnueabihf-pkg-config: cnt++: not found
Argument #1 = --print-errors
/usr/bin/arm-linux-gnueabihf-pkg-config: 19: /usr/bin/arm-linux-gnueabihf-pkg-config: cnt++: not found
Argument #1 = glib-2.0 >= 2.28
/usr/bin/a
2番目のコード – うまくいきます
Argument #1 = --exists
Argument #2 = --print-errors
Argument #3 = glib-2.0 >= 2.28
最初のコード
cnt=1
for i do
echo "Argument #$cnt = $i"
((cnt++))
done
2番目のコード
count=1
for arg do
printf 'Argument #%d = %s\n' "$count" "$arg"
count=$(( count + 1 ))
done
ベストアンサー1
2番目の例では、#
実行時に正しい出力を生成するために出力文字列の1つだけが必要ですbash
。
cnt=1
for i do
echo "Argument #$cnt = $i"
((cnt++))
done
これは通常、実行を使用している場合は機能しません/bin/sh
。特に算術評価構文を理解していないシェルの場合/bin/sh
(たとえば、シェルが両方のサブシェルセットで文字列を実行しようとすると、上記のコードに対してエラーが生成されます。上記のコードを使用する必要がある場合は、スクリプトの一番上の行を使用して実行されていることを確認してください。dash
((...))
dash
cnt++: not found
((cnt++))
cnt++
bash
#!/bin/bash
最大の移植性のために、次のものを使用できます。
count=1
for arg do
printf 'Argument #%d = %s\n' "$count" "$arg"
count=$(( count + 1 ))
done
xpg_echo
また、シェルオプションがで有効になっている場合は、バックスラッシュを含む引数関連の問題を回避し、bash
POSIX構文を使用してカウンタをインクリメントします。