
そのため、スクリプトを実行するときに各パラメータに対して新しい変数を生成する関数をスクリプトで生成してみました。これは私のコードです。
#!/bin/bash
# Creating function log
#ARG1=${1}
log() {
echo "You called DA LOG FUNCTION!!!1!!11one111!"
}
log
#echo "${1}"
#echo "$ARG1"
fcta() {
for ((x=0;x<1000;++x)); do
"a$x"=${1}
if [[ ${#} -gt 1 ]]; then
shift
else
x=1001
fi
echo "${a$x}"
# echo "${1}"
}
fcta $@
わかりました:
vagrant@localhost vagrant]$./luser-demo10.sh 12 12 12
You called DA LOG FUNCTION!!!1!!11one111!
./luser-demo10.sh: line 25: syntax error near unexpected token `}'
./luser-demo10.sh: line 25: `}'
[04:11----------------------------------------
vagrant@localhost vagrant]$
25番目の削減です。
# echo "${1}"
} <----- LINE 25
fcta $@
編集:不足している「完了」について教えてくれてありがとう。人々は私に何をしたいのか尋ね、私は他の人に尋ねました。質問これでこの質問に対する回答が得られました(質問はなぜ構文エラーが発生するのですか)。もう一度ありがとうございます。
答え1
あなたの関数にコマンドリストを閉じるdo
一致はありません。done
努力する住宅検査スクリプトを確認してください。以下は、スクリプトで検出されたエラーと疑わしい点に関するレポートです。
Line 16:
for ((x=0;x<1000;++x)); do
^-- SC1009: The mentioned syntax error was in this for loop.
^-- SC1073: Couldn't parse this arithmetic for condition. Fix to allow more checks.
^-- SC1061: Couldn't find 'done' for this 'do'.
Line 25:
}
^-- SC1062: Expected 'done' matching previously mentioned 'do'.
^-- SC1072: Unexpected keyword/token. Fix any mentioned problems and try again.
答え2
andcozはコードのエラーを示しています(まず、done
閉ループがありません。)しかし、私の考えはあなたと似ていると思います。本物配列が欲しい
コードで実行したいことは明確ではありませんが、コマンドライン引数を配列にコピーするのとほぼ同じようです。
a=( "$@" )
${a[i]}
ifi
が整数値を持つ変数である場合は、その配列の特定の要素を取得できます。
$@
拡張された二重引用符はリストの個々の要素を引用するので、非常に重要です$@
。二重引用符がない場合、シェルは要素(の内容)をスペースに分割し、IFS
その要素に対してファイル名の生成(「globbing」)を実行します。
break
ループが終了した後、ループ変数をその値に設定するのではなく、ループを終了するために使用されます。