不使用$1,$2,$3如何达成相同的效果
时间: 2023-12-30 10:03:46 浏览: 19
如果你不想使用$1、$2、$3等特殊变量来获取命令行参数,也可以直接使用$@或$*来获取所有的命令行参数,然后在脚本中进行处理。例如,以下代码可以实现和上面相同的效果:
```
#!/bin/bash
for arg in "$@"
do
case $arg in
-name=*)
NAME="${arg#*=}"
;;
esac
done
echo "Hello, $NAME"
```
在上面的代码中,使用了for循环遍历所有的命令行参数,并使用case语句来识别-name=参数,并将其后面的值赋给变量NAME。最后,使用echo语句输出Hello, $NAME。这样,当你执行./test.sh -name=John时,就会输出Hello, John。
需要注意的是,使用$@或$*来获取所有命令行参数时,参数之间会使用空格分隔。因此,如果参数中包含空格或特殊字符,可能会导致解析错误。为避免这种情况,可以使用双引号将参数括起来,例如./test.sh -name="John Smith"。
相关问题
vue3中如何使用 $forceUpdate
在 Vue 3 中,$forceUpdate 已经被废弃了,取而代之的是一个新的 API:markRaw。markRaw 可以用来标记一个响应式对象,使其不再被追踪依赖关系,从而达到类似于 $forceUpdate 的效果。
使用方法如下:
```javascript
import { markRaw } from 'vue'
export default {
setup() {
const state = markRaw({
count: 0
})
function handleClick() {
state.count++
}
return {
state,
handleClick
}
}
}
```
在上面的例子中,我们使用 markRaw 标记了 state 对象,使其不再被追踪依赖关系。当我们调用 handleClick 函数时,state.count 的值会发生变化,但是组件不会重新渲染。
vue3中如何使用$forceUpdate()
在Vue 3中,组件实例上的$forceUpdate()方法已经被废弃,取而代之的是强制渲染的新API——markRaw。markRaw用于标记一个对象,使其不被响应式追踪,当其发生变化时,不会触发组件的重新渲染。如果需要强制渲染,可以使用Vue 3提供的新API——triggerRef。triggerRef接受一个ref对象作为参数,手动触发其更新。
例如,假设有一个组件中的数据data需要强制重新渲染,可以将其封装为一个ref对象,然后在需要强制渲染的时候调用triggerRef方法:
```
<template>
<div>{{ refData.value }}</div>
<button @click="updateData">Update Data</button>
</template>
<script>
import { ref, triggerRef } from 'vue'
export default {
setup() {
const data = ref('initial data')
const refData = markRaw(data)
const updateData = () => {
data.value = 'updated data'
triggerRef(refData)
}
return {
refData,
updateData
}
}
}
</script>
```
在上面的例子中,当点击按钮时,调用updateData方法,更新数据data的值,并手动触发refData的更新,以达到强制渲染的效果。