加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用带空格的文件中的参数调用bash脚本中的函数

发布时间:2020-12-15 21:16:12 所属栏目:安全 来源:网络整理
导读:我想执行一个带有从文件读入的参数的命令. 这很好,直到其中一个参数需要有空格. 我试过用引号和反斜杠对单词进行分组,但两者都没有用. 我所遵循的功能正是xargs所做的,除了我需要调用函数而不是命令,因为它依赖于脚本中其他地方设置的其他变量 脚本: do_ech
我想执行一个带有从文件读入的参数的命令.
这很好,直到其中一个参数需要有空格.

我试过用引号和反斜杠对单词进行分组,但两者都没有用.

我所遵循的功能正是xargs所做的,除了我需要调用函数而不是命令,因为它依赖于脚本中其他地方设置的其他变量

脚本:

do_echo() {
    echo '$1:' $1
    echo '$2:' $2
}
line=`cat input.txt` #cat used for simplicity,can have more than 1 line
do_echo $line

input.txt中:

"hello world" "hello back"

预期结果:

$1: hello world
$2: hello back

观察结果:

$1: "hello
$2: world"

编辑:

我使用它来使用不同的输入多次执行相同的命令.
每行最多有15个参数,可以超过50行.

表格格式是理想的,尽管将每个参数放在一行上的当前答案都可行.

解决方法

不带引号的变量(如在do_echo $行中)严格分割为IFS变量中的任何字符(默认情况下设置为制表符,空格,换行符).严格意味着严格意义上说,没有办法引用或逃避分裂.

基本的解决方法是将一个不需要的字符(例如冒号:)定义为拆分字符.

例如

$cat input.txt
hello world:hello back
$line=$(head -n 1 input.txt)
$OLDIFS=$IFS IFS=:
$do_echo $line
$1: hello world
$2: hello back
$IFS=$OLDIFS

另一种解决方法是使用eval,但eval很危险.你绝对必须相信输入!

$cat input.txt
"hello world" "hello back"
$line=$(head -n 1 input.txt)
$eval do_echo "$line"
$1: hello world
$2: hello back

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读