#!/usr/bin/tcsh
setenv LC_ALL de_DE
rm /home/users0/me/master/me/LookupScripts/Sampa/*
foreach f ( /home/users0/me/master/me/LookupScripts/Tokenized/*.txt )
set g = "`basename $f .txt`"
set h = "`echo $g | tr "tokenized" "sampa"`"
cat $f | ./a4.lookup > Sampa/$h.txt
end
/home/users0/me/master/me/LookupScripts/Tokenized/
という.txt
名前のファイルがありますrandomnumber_tokenized.txt
。そのファイルに対してスクリプトを実行し、スクリプトの出力をフォルダに入れたいと思いますSampa/
。ファイル名は保持したいが、新しいファイルが次のように見えるようにセクション名を変更したいと思いrandombumber_
ます。tokenized
sampa
randomnumber_sampa.txt
奇妙なことは、最終ファイルが呼び出されなかったrandomnumber_sampa.txt
にもかかわらずrandomnumber_samaaaaaa.txt
私はこれがtcshの問題であるか、コマンドの問題だと思いますsetenv
。
私は何が間違っていましたか?
答え1
あなたが直面している即時の問題は、tr
あなたが望むことをしていないということです。tr
実装する特徴文字列置換ではなく置換です。このコマンドは、by、by、by、(byは後続の項目で置き換えられます)、and、およびbyでtr "tokenized" "sampa"
置き換えられます。t
s
o
a
k
m
e
p
e
n
i
z
e
d
a
文字列置換を実行するには、sedを使用できます。しかし、ちょっと不便でフィットするのも難しいです。単純な文字列操作の場合は、外部ツールではなくシェルの文字列操作構成を使用してください。
Tcshには文字列操作構造はありません。しかし、過去20年ほど(t)cshは一流のコマンドラインシェルではありませんでした。スクリプトには決して適していません。。 cshスクリプトを作成しないでください。
返品:
- (または同義語)
LC_ALL
以外に設定しないでください。問題を引き起こす可能性のあるすべてのカテゴリをカバーしてください。すべてのカテゴリにデフォルト値を設定するには、を使用します。ただし、スクリプトでは(文字セット)と(ユーザーに送信されるメッセージ)を除いて、通常は必要なすべてです。C
POSIX
LC_ALL
LANG
C
LC_CTYPE
LC_MESSAGES
- sh の文字列演算は次のように行われます。パラメータ拡張。
- 通常のshには文字列置換構造はありませんが、bashにはあります。
- 変数の置換には常に二重引用符を使用してください。
#!/bin/bash
export LC_ALL=C
for f in /home/users0/me/master/me/LookupScripts/Tokenized/*.txt; do
g="${f##*/}"
h="${g//tokenized/sampa}"
./a4.lookup <"$f" >"Sampa/$h.txt"
end