Mic*_*ski 1 variables bash shell terminal
我试图在bash中分配一个变量:
assignssid="airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'"
Run Code Online (Sandbox Code Playgroud)
当前执行此操作,然后运行时echo "$assignssid",结果如下所示:
airport -I | awk '/ SSID/ {print substr(-bash, index(-bash, ))}'
Run Code Online (Sandbox Code Playgroud)
如何使变量与引号内的代码一起使用?
当您拥有时"'$0'",只有那些外部引号是语法上的(并控制外壳如何扩展值:内部引号只是文字值,并且不改变$0处理方式。
如果您不希望扩展受到重视,请不要使用双引号。
# assign the directory separately, just to make the line shorter for easier reading
dir=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/
# now, expand the directory name in double quotes, but use the $'' quoting style otherwise
assignssid="$dir"$'airport -I | awk \'/ SSID/ {print substr($0, index($0, $2))}\''
Run Code Online (Sandbox Code Playgroud)
在里面$'',\'是一个文字单引号(同样,\n是一个换行符,\t一个制表符等),并且不会发生任何参数扩展($'$0'与'$0',不是一样"$0")。
完成此操作后,您可以看到echoing变量发出的命令完整保留了单引号内容:
$ echo "$assignssid"
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'
Run Code Online (Sandbox Code Playgroud)
...或更可能与您预期的用例密切相关:
current_ssid=$(eval "$assignssid")
Run Code Online (Sandbox Code Playgroud)
'"'"'让我们做的方式,第一个答案不就是庆典只:
dir=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/
assignssid="$dir"'airport -I | awk '"'"'/ SSID/ {print substr($0, index($0, $2))}'"'"''
Run Code Online (Sandbox Code Playgroud)
该字符串的作用如下:
'关闭单引号上下文"打开双引号上下文'是字面意思,因此成为您价值的一部分"关闭双引号上下文'恢复原始的单引号上下文字符串变量根本不是适合此工作的工具。而是使用一个函数:
airport_dir=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/
assignssid() {
"$airport_dir"/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'
}
Run Code Online (Sandbox Code Playgroud)
...之后:
current_ssid=$(assignssid)
Run Code Online (Sandbox Code Playgroud)