我看过其中一些问题和一些答案,但它们只告诉我如何将结果回显到屏幕上,并且通常只涉及一个角色。我需要删除字符',
并保留答案里面一个变量
我的 $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 和编写脚本都很陌生......所以请把我视为“愚蠢的”......
编辑 27/1
我用以下内容开始脚本:
./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 \',
;喜欢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]