forwardName=$(awk -F. '{print $1}' $filename)
时间: 2024-04-28 12:22:39 浏览: 15
在你的命令中,你想使用 awk 命令截取文件名的前缀,并将结果赋值给变量 `forwardName`。如果文件名存储在变量 `$filename` 中,你可以使用以下命令:
```shell
forwardName=$(echo "$filename" | awk -F. '{print $1}')
```
解释:
1. `echo "$filename"` 用于将变量 `$filename` 的值输出到标准输出。
2. `|` 管道符用于将 `echo` 命令的输出传递给后面的命令。
3. `awk -F. '{print $1}'` 用于按照点号作为分隔符,打印每行文本的第一个字段(即文件的前缀名)。
4. `$(...)` 用于将命令的输出结果赋值给变量 `forwardName`。
执行以上命令后,将会将文件名的前缀赋值给变量 `forwardName`。
请确保在使用该命令之前,先将文件名赋值给变量 `$filename`。例如,可以使用以下方式将文件名赋值给变量:
```shell
filename="example.txt"
```
然后,再执行上述的 awk 命令来截取文件名的前缀,并将结果赋值给变量 `forwardName`。
希望以上信息对你有所帮助。如果有任何进一步的问题,请随时提问。
相关问题
awk -F. '{print $1}' $filename
在你的命令中,你想使用 awk 命令截取文件名的前缀,并且文件名存储在变量 `$filename` 中。为了实现这个目标,你可以使用以下命令:
```shell
echo "$filename" | awk -F. '{print $1}'
```
解释:
1. `echo "$filename"` 用于将变量 `$filename` 的值输出到标准输出。
2. `|` 管道符用于将 `echo` 命令的输出传递给后面的命令。
3. `awk -F. '{print $1}'` 用于按照点号作为分隔符,打印每行文本的第一个字段(即文件的前缀名)。
执行以上命令后,会输出存储在变量 `$filename` 中的文件名的前缀。
请确保在使用该命令之前,先将文件名赋值给变量 `$filename`。例如,可以使用以下方式将文件名赋值给变量:
```shell
filename="example.txt"
```
然后,再执行上述的 awk 命令来截取文件名的前缀。
希望以上信息对你有所帮助。如果有任何进一步的问题,请随时提问。
#!/bin/sh # /opt/app/bin/ini-rw.sh "set" "/opt/app/bin/cfg/net.conf" "main" "devtype" "1" operate=$1 file=$2 section=$3 key=$4 value=$5 # 读取 ini 文件中的值 get_ini_value() { section=$1 key=$2 awk -F '=' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){print \$2;exit}" $file } # 设置 ini 文件中的值 set_ini_value() { section=$1 key=$2 value=$3 awk -F '=' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){\$2=\"$value\"}1" $file > tmp.ini mv tmp.ini $file } if [[ $operate = "get" ]]; then val=$(get_ini_value $section $key) echo $val else set_ini_value $section $key $value echo 'update success' fi分析上述代码, 为什么执行: 【./ini-rw.sh "set" "/opt/app/bin/cfg/net.conf" "main" "devtype" "1"】 这个语句后 ,devtype 1 会少一个等号=?
这是因为 awk 命令中的分隔符为等号=,而在 set_ini_value() 函数中直接使用了等号=来赋值,导致 awk 命令解析时出现了问题。
解决方法:
可以将 awk 命令中的分隔符改为其他字符,例如冒号:,并在 set_ini_value() 函数中也使用相同的字符来赋值。例如修改代码如下:
```
#!/bin/sh
operate=$1
file=$2
section=$3
key=$4
value=$5
# 读取 ini 文件中的值
get_ini_value() {
section=$1
key=$2
awk -F ':' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){print \$2;exit}" $file
}
# 设置 ini 文件中的值
set_ini_value() {
section=$1
key=$2
value=$3
awk -F ':' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){\$2=\"$value\"}1" $file > tmp.ini
mv tmp.ini $file
}
if [[ $operate = "get" ]]; then
val=$(get_ini_value $section $key)
echo $val
else
set_ini_value $section $key $value
echo 'update success'
fi
```
这样执行 【./ini-rw.sh "set" "/opt/app/bin/cfg/net.conf" "main" "devtype" "1"】 就不会出现等号=丢失的问题了。