私はUbuntu Linuxでbashシェルを使用しています。私のスクリプトにこれがあります
output_file=create_test_results_file "$TFILE1"
echoステートメントは、$ TFILE1の値がファイルパスであることを確認しました。
/tmp/run_tests.sh1.7381.tmp
しかし、スクリプトを実行すると、ファイルの内容は何とか私の関数に渡され、その内容は次のようになります。
#!/bin/bash
create_test_results_file () {
RESULTS_INPUT_FILE=$1
OUTPUT_FILE="/tmp/output`date +%m`_`date +%d`_`date +%y`.txt"
touch $OUTPUT_FILE
marker=""
num_passed=0
num_failed=0
while read p; do
if [[ $p == *"√"* ]]; then
if [[ $p == *"PASSED"* ]]; then
num_passed=$((num_passed+1))
elif [[ $p == *"WARNING"* ]]; then
num_failed=$((num_failed+1))
fi
elif [ $num_passed -gt 0 -o $num_failed -gt 0 ]
then
echo "second branch"
echo "$marker PASSED: $num_passed, WARNING: $num_failed" >> $OUTPUT_FILE
marker=$p
num_passed=0
num_failed=0
else
marker=$p
fi
done <"$RESULTS_INPUT_FILE"
# Add un-added lines
if [ $num_passed -gt 0 -o $num_failed -gt 0 ]
#if [ \( "$num_passed" -gt 0 -o "$num_failed" -gt 0 \) -a \( -z "$marker" \) ]
then
echo "$marker PASSED: $num_passed, FAILED: $num_failed" >> $OUTPUT_FILE
fi
echo $OUTPUT_FILE
}
なぜなら、次のようなエラーが発生するからです。
/tmp/run_tests.sh1.7381.tmp: line 1: Validation: command not found
/tmp/run_tests.sh1.7381.tmp: line 2: 2017-04-20: command not found
/tmp/run_tests.sh1.7381.tmp: line 3: Login: command not found
/tmp/run_tests.sh1.7381.tmp: line 4: $'\E[1': command not found
「Validation」、「2017-04-20」、その他の単語はこのファイルの内容です。ファイルパスを文字通り解釈せずにパラメータとして渡す正しい方法は何ですか?
答え1
関数を呼び出すコマンドライン:
output_file=create_test_results_file "$TFILE1"
これにより、コマンドを実行する前に変数に値が割り当てられますcreate_test_results_file
。output_file
"$TFILE1"
欲しいと思う
output_file=$( create_test_results_file "$TFILE1" )
これは出力をcreate_test_results_file "$TFILE1"
変数に割り当てますoutput_file
。
このスクリプトにはいくつかのコメントを追加できますが、次の行を選択します。
OUTPUT_FILE="/tmp/output`date +%m`_`date +%d`_`date +%y`.txt"
これは次のように書く方が良いです。
OUTPUT_FILE=$( date +"/tmp/output%m_%d_%y.txt" )
また関連: