Bash 在shell脚本中将带有特殊字符的参数传递给函数
我有一个函数,我向它传递的参数如下。。(从文本文件中的一行读取) 但是函数将整个字符串作为一个参数Bash 在shell脚本中将带有特殊字符的参数传递给函数,bash,shell,Bash,Shell,我有一个函数,我向它传递的参数如下。。(从文本文件中的一行读取) 但是函数将整个字符串作为一个参数my_proj-x build,而不是给我$1=my_proj,$2=-x,$3=build,这样我就可以根据参数执行一些操作 关于如何使shell脚本以这种方式运行,有什么建议吗 编辑:以下是代码段(从OP的评论中添加): 区别在于调用函数的位置 调用函数时,不要以双引号传递参数,在这种情况下,带空格的整个字符串被视为单个实体 而不是没有双引号的通行证 测试 $ fun() > { >
my_proj-x build
,而不是给我$1=my_proj,$2=-x,$3=build
,这样我就可以根据参数执行一些操作
关于如何使shell脚本以这种方式运行,有什么建议吗
编辑:以下是代码段(从OP的评论中添加):
区别在于调用函数的位置 调用函数时,不要以双引号传递参数,在这种情况下,带空格的整个字符串被视为单个实体 而不是没有双引号的通行证 测试
$ fun()
> {
> echo $1, $2, $3
> }
# Calling the function without double quotes
$ fun my_proj -x build
my_proj, -x, build
# Calling the function with double quotes
$ fun "my_proj -x build"
my_proj -x build, ,
$
如果将变量传递给函数
$ var="my_proj -x build"
$ fun $var
my_proj, -x, build
$ fun "$var"
my_proj -x build, ,
区别在于调用函数的位置 调用函数时,不要以双引号传递参数,在这种情况下,带空格的整个字符串被视为单个实体 而不是没有双引号的通行证 测试
$ fun()
> {
> echo $1, $2, $3
> }
# Calling the function without double quotes
$ fun my_proj -x build
my_proj, -x, build
# Calling the function with double quotes
$ fun "my_proj -x build"
my_proj -x build, ,
$
如果将变量传递给函数
$ var="my_proj -x build"
$ fun $var
my_proj, -x, build
$ fun "$var"
my_proj -x build, ,
区别在于调用函数的位置 调用函数时,不要以双引号传递参数,在这种情况下,带空格的整个字符串被视为单个实体 而不是没有双引号的通行证 测试
$ fun()
> {
> echo $1, $2, $3
> }
# Calling the function without double quotes
$ fun my_proj -x build
my_proj, -x, build
# Calling the function with double quotes
$ fun "my_proj -x build"
my_proj -x build, ,
$
如果将变量传递给函数
$ var="my_proj -x build"
$ fun $var
my_proj, -x, build
$ fun "$var"
my_proj -x build, ,
区别在于调用函数的位置 调用函数时,不要以双引号传递参数,在这种情况下,带空格的整个字符串被视为单个实体 而不是没有双引号的通行证 测试
$ fun()
> {
> echo $1, $2, $3
> }
# Calling the function without double quotes
$ fun my_proj -x build
my_proj, -x, build
# Calling the function with double quotes
$ fun "my_proj -x build"
my_proj -x build, ,
$
如果将变量传递给函数
$ var="my_proj -x build"
$ fun $var
my_proj, -x, build
$ fun "$var"
my_proj -x build, ,
从你的评论来看: 我正在从文本文件中的一行读取命令,而 该文件现在是我的_proj-x构建,我的脚本将该行读入 变量'var'并调用函数build(){} 我想你想要这个: 使用: 而不是
build$var
或者您可以更改代码以省略IFS=$'\n'
,以便build$var
按预期工作。($var
需要取消报价)
而是使用while循环:
while IFS= read -r line;do
#do something
done <filepath
而IFS=read-r行;做
#做点什么
完成从您的评论判断:
我正在从文本文件中的一行读取命令,而
该文件现在是我的_proj-x构建,我的脚本将该行读入
变量'var'并调用函数build(){}
我想你想要这个:
使用:
而不是build$var
或者您可以更改代码以省略IFS=$'\n'
,以便build$var
按预期工作。($var
需要取消报价)
而是使用while循环:
while IFS= read -r line;do
#do something
done <filepath
而IFS=read-r行;做
#做点什么
完成从您的评论判断:
我正在从文本文件中的一行读取命令,而
该文件现在是我的_proj-x构建,我的脚本将该行读入
变量'var'并调用函数build(){}
我想你想要这个:
使用:
而不是build$var
或者您可以更改代码以省略IFS=$'\n'
,以便build$var
按预期工作。($var
需要取消报价)
而是使用while循环:
while IFS= read -r line;do
#do something
done <filepath
而IFS=read-r行;做
#做点什么
完成从您的评论判断:
我正在从文本文件中的一行读取命令,而
该文件现在是我的_proj-x构建,我的脚本将该行读入
变量'var'并调用函数build(){}
我想你想要这个:
使用:
而不是build$var
或者您可以更改代码以省略IFS=$'\n'
,以便build$var
按预期工作。($var
需要取消报价)
而是使用while循环:
while IFS= read -r line;do
#do something
done <filepath
而IFS=read-r行;做
#做点什么
完成您评论中显示的代码相当曲折。您遇到的问题是使用IFS
,这会让您无法进行其他变量扩展<代码>IFS
技术可能有用,但也可能危险。在这种情况下,完全没有必要使用cat
这对我很有用:
#!/bin/bash
runBuild() {
echo "\$1: $1"
echo "\$2: $2"
echo "\$3: $3"
}
while read line
do
echo "starting build for $line"
runBuild $line
done < "gash.txt"
输出:
starting build for my_proj -x build
$1: my_proj
$2: -x
$3: build
你评论中的代码相当曲折。您遇到的问题是使用IFS
,这会让您无法进行其他变量扩展<代码>IFS
技术可能有用,但也可能危险。在这种情况下,完全没有必要使用cat
这对我很有用:
#!/bin/bash
runBuild() {
echo "\$1: $1"
echo "\$2: $2"
echo "\$3: $3"
}
while read line
do
echo "starting build for $line"
runBuild $line
done < "gash.txt"
输出:
starting build for my_proj -x build
$1: my_proj
$2: -x
$3: build
你评论中的代码相当曲折。您遇到的问题是使用IFS
,这会让您无法进行其他变量扩展<代码>IFS
技术可能有用,但也可能危险。在这种情况下,完全没有必要使用cat
这对我很有用:
#!/bin/bash
runBuild() {
echo "\$1: $1"
echo "\$2: $2"
echo "\$3: $3"
}
while read line
do
echo "starting build for $line"
runBuild $line
done < "gash.txt"
输出:
starting build for my_proj -x build
$1: my_proj
$2: -x
$3: build
你评论中的代码相当曲折。您遇到的问题是使用IFS
,这会让您无法进行其他变量扩展<代码>IFS
技术可能有用,但也可能危险。在这种情况下,完全没有必要使用cat
这对我很有用:
#!/bin/bash
runBuild() {
echo "\$1: $1"
echo "\$2: $2"
echo "\$3: $3"
}
while read line
do
echo "starting build for $line"
runBuild $line
done < "gash.txt"
输出:
starting build for my_proj -x build
$1: my_proj
$2: -x
$3: build
事实上,我在打电话时没有用双引号。我从一个文本文件中读取命令,文件中的行在这种情况下,您必须提供相关代码,以便从文件中读取行。这将提供额外的信息,事实上我打电话时没有任何双引号。我在读书