私はこれらの質問のいくつかと答えのいくつかを見てきましたが、結果を画面に表示する方法だけを教えてくれ、通常は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]