ここで強調表示されている構文は、問題が何であるかを示す良い指標になるはずです。複数の文字列が、文字列に含まれていないコンテンツと一緒にスマッシュされています。これを置き換えてみてください:
cq_fname="%let outputfile="/user/cq_"$1".csv";"
これとともに:
cq_fname="%let outputfile=\"/user/cq_$1.csv\";"
"
文字列の内側を文字でエスケープし、ファイル名におそらく存在しないと思われる\
文字を削除しました。"
Alokは、置換コマンドに別の文字を使用することを提案しています-それは必要です。
また、割り当てと文字列の両方で同じ変数名を使用する必要があります。(D'oh!)
最終的なスクリプトは次のとおりです。
#!/bin/bash
cq_fname="%let outputfile=\"/user/cq_$1.csv\";"
sed "29s|.*|$cq_fname|" file1.sas > file2.sas
set -x
スクリプトの先頭に追加して、一致しない変数名を見つけました。途中でスクリプトの実行出力が表示されました。
壊れた:
$ ./replace
+ cq_fname='%let outputfile="/user/cq_.csv";'
+ sed '29s|.*||' file1.sas
修理済み:
$ ./replace
+ cq_fname='%let outputfile="/user/cq_.csv";'
+ sed '29s|.*|%let outputfile="/user/cq_.csv";|' file1.sas
set -x
必要なときに、すばらしい小さなデバッグツールです。