変数から不要な文字を削除する

変数から不要な文字を削除する

私はこれらの質問のいくつかと答えのいくつかを見てきましたが、結果を画面に表示する方法だけを教えてくれ、通常は1文字しか含まれていません。文字を削除し', 、答えを維持する必要があります~へ変数

私の$ var3は次のようになります。 ( '/scripts/test1.sh', 'Alf Complete', '-', 'S1E1', '-', 'Episode 1', 'has', 'been', 'paused', 'hellfire', 'i', 'Engsub - Series', 'testing'] これは他のプログラムの出力です。)

これはコマンドに変換され、「$ var4」を使用して開始する必要があります(そして次のようになります)/scripts/test1.sh Alf Complete - S1S1 - Episode 1

問題は、どのような不要な文字を削除し、新しい変数($ var4など)に新しいデータを保持できるかということです。

私はLinuxとスクリプトを書くのにあまり慣れていないと付け加えることができます。だから私を「愚かだ」と思ってください...

1月27日修正

次のようにスクリプトを起動します。

./test1.sh 'test1','test2','test3'

スクリプトの後のテキストは、スクリプトを呼び出したプログラムが残したパラメータです。

これは私の現在のスクリプトです。

#!/bin/sh
# populate var0
read -r var0<<-EOF
messer  # is the program that is going to be called in the end of this script
EOF

# populate var1
read -r var1<<-EOF
 --command='m "Adam Larsson"   # this is the first arguments 
EOF
# populate argumentsreal
read -r argumentsreal<<-EOF
$@   #this is the arguments that are posted by the application that calls this script
EOF

var4="'"  # this adds the last closing '  to the code

# Join Forces
var3="$var0 $var1 $argumentsreal $var4"   
echo $var3>txt.txt # dumping result (bugcheck)
$var3  # Executing command

これはこれまでの私のコードです。最大の問題は、それを実行するとプログラムがメッサーしかし、Invalid message - check your syntax これを行うと、次のようなcat txt.txt結果が得られます。

messer --command='m "Adam Larsson" テスト test1, test2, test3

これで、そのテキスト行をコピーしてコマンドラインに貼り付け、Enterキーを押すと完璧に動作します。

もしそうなら、なぜあなたはスクリプトで実行しても動作しませんか?

答え1

tr -d \',;likeを試してくださいprintf '%s\n' "$var3" |tr -d \',。これにより、変数からすべてのカンマと一重引用符が削除されます$var

答え2

bash「パラメータ拡張:パターンの置き換え」を試してください。

$ echo "${var3//,}"
'/scripts/tautullimess.sh' 'Alf Complete' '-' 'S1E1' '-' 'Episode 1' 'has' 'been' 'paused' 'hellfire' 'i' 'Engsub - Series''testing']
$ echo "${var3//[\',]}"
/scripts/tautullimess.sh Alf Complete - S1E1 - Episode 1 has been paused hellfire i Engsub - Series testing]

関連情報